级联删除在EF 6 Code First中不起作用

时间:2017-10-07 15:17:19

标签: entity-framework

我有以下实体

public class Division
{
    public int Id { get; set; }
    public SubDivision SubDivision { get; set; }
}

public class SubDivision
{
    public int Id { get; set; }
}

然后是流畅的API

            modelBuilder.Entity<Division>()
                        .HasOptional(x => x.SubDivision)
                        .WithOptionalDependent()
                        .WillCascadeOnDelete(true);

然后我尝试删除一个部门,我期待它的SubDivisions被删除

Division div = c.Divisions.Include(x => x.SubDivision).First();
c.Divisions.Remove(div);
c.SaveChanges();

知道这是什么问题吗?

1 个答案:

答案 0 :(得分:1)

级联删除始终从 principal (被引用的实体)到依赖(引用它的实体)工作,即删除主体会自动删除从属。

在一对多关系中,校长总是一方而且依赖 - 多方面。

在一对一的关系中,所需的结束始终是主体,可选的结束依赖。但是,如果两端都是必需的或两端都是可选的(与您的一样),则主体和从属由配置决定。在您的情况下,.WithOptionalDependent()行告诉EF正在配置的实体(Division)是依赖,因此Division将具有FK到{{ 1}}并删除SubDivision也会删除SubDivision

如果意图不同(正如问题所示),只需替换

即可
Division

.WithOptionalDependent()