Запись в таблице соединения конфигурации Api ядра Entity Framework Fluent зависит от значения

#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(). Теперь это работает. Спасибо.