Включить каскадные удаления в EF-коде Сначала без отображения внешнего ключа

При выполнении удаления отношения "один-много", не подвергая внешнему ключу, EF удаляет родительскую запись и пытается удалить внешний ключ на дочерних записях. Это, конечно, вызывает ошибку, потому что внешний ключ не имеет значения NULL. Добавление внешнего ключа к дочернему классу переопределяет это поведение, но я бы не стал его раскрывать.

Например, учитывая следующие два класса, я бы предпочел не иметь JobId как свойство класса Project.

public class Job : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Company { get; set; }

    [Required]
    [StringLength(100)]
    public string JobTitle { get; set; }

    public ICollection<Project> Projects { get; set; }
}

public class Project : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    public string Summary { get; set; }

    public int JobId { get; set; }
}

Есть ли способ включить каскадные удаления в EF Code First, не подвергая внешний ключ во многих отношениях?

Ответы

Ответ 1

Да! Удалите JobId и добавьте следующее:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Job>().HasMany(j => j.Projects).WithRequired();
    }

В базе данных это добавит каскадное удаление в отношениях PK/FK.

(Я предполагаю, что ваш ModelBase имеет целое число Id =)