ON DELETE CASCADE в c#

Таблицы в базе создаю автоматически соответственно моделям (если их в базе нет):

public BusinessContext(DbContextOptions<BusinessContext> options)
            : base(options)
        {
            Database.EnsureCreated();
        }

Вот мои модели где Founder связан с Customer (Внешним ключом):

public class Customer
    {
        public int Id { get; set; }
        public int ITN { get; set; }
        public string CustomerName { get; set; }
        public string EntityType  { get; set; }

        public string CreationData { get; set; }
        public string UpdateDate { get; set; }
    }
public class Founder
    {
        public int FoundersId { get; set; }
        public int ITN { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string CreationData { get; set; }
        public string UpdateDate { get; set; }
        //_______________________________________
        public int CustomerId { get; set; }
        public Customer Customers { get; set; }
    }

Что нужно внести чтоб при удалении каких то данных происходило автоматически удаление зависимых данных(ON DELETE CASCADE)?


Ответы (1 шт):

Автор решения: Jagailo

Укажите данное поведение в конфиге EF.

.NET Core (Документация):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Customer>()
        .HasOne(x => x.Founder)
        .WithMany(a => a.Customers)
        .OnDelete(DeleteBehavior.Delete);
}

.NET Framework (Документация):

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Customer>()
        .HasOptional(a => a.Founder)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
}

P.S. У вас неправильно составлены модели для связи. Если это 1 к 1, то в обоих сущностях должны быть поля противоположных. Если это 1 ко многим, то в одной должно быть поле другой сущности, а во второй список первых.

P.P.S. Не используйте множественное число в имени поля для одиночного объекта.

→ Ссылка