Включить каскадные удаления в 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 =)