Разрешить каскадное удаление в EF Code First без предоставления внешнего ключа - PullRequest
14 голосов
/ 20 марта 2011

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

Например, учитывая следующие два класса, я бы предпочел не иметь 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Во-первых, не раскрывая внешний ключ на многих сторонах отношений?

1 Ответ

14 голосов
/ 20 марта 2011

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

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

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

(я предполагаю, что ваша ModelBase имеет целочисленный идентификатор =)

...