#asp.net-core #entity-framework-core #ef-fluent-api
Вопрос:
У меня есть объединенная таблица UserSystem
, которая:
public class UserSystem
{
public int UserSystemId { get; set; }
public int SystemId { get; set; }
public virtual System System { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
public DateTime AddedDate { get; set; }
public int AddedByUserId { get; set; }
public bool Deleted { get; set; }
public DateTime? DeletedDate { get; set; }
public int? DeletedByUserId { get; set; }
}
И конфигурация
public void Configure(EntityTypeBuilder<UserSystem> builder)
{
builder.ToTable("UserSystem", DbSchemas.Dbo);
builder.HasKey(e => e.UserSystemId);
builder.HasOne(bc => bc.User).WithMany(b => b.UserSystems).HasForeignKey(bc => bc.UserId);
builder.HasOne(bc => bc.System).WithMany().HasForeignKey(bc => bc.SystemId);
}
Теперь я хочу иметь возможность добавлять новые UserSystem
с тем же UserId
и SystemId
, но только тогда, когда тех же данных не существует Deleted == 0
. Если, например UserId = 1
, и SystemId = 1
есть в базе данных, но она есть Deleted = 1
, то я хочу иметь возможность снова добавить ту же запись Deleted = 0
, но не иметь возможности добавлять те же данные, когда есть какая-либо запись с этими данными Deleted = 0
. Как я могу достичь этого в FluentAPI?
Комментарии:
1. Уникальный индекс с фильтром ?
2. @IvanStoev этим?
builder.HasIndex(x => new { x.UserId, x.SystemId }).HasFilter("[Deleted] = 0");
Это не работает. Я все еще могу добавить что угодно в базу данных.3. @IvanStoev я забыл использовать . isUnique(). Теперь это работает. Спасибо.