EF 4.3.1中用于可选关系的级联行为

时间:2012-05-29 09:37:29

标签: c# entity-framework ef-code-first

我有从Child到Parent类的可选关系。如果父对象被标记为删除,我希望在SubmitChanges上获得一个例外,如果仍有子对象引用它。

我尝试的配置是这样的(从父级到子级没有导航属性):

modelBuilder.Entity<Child>()
    .HasOptional<Parent>(child => child.Parent)
    .WithMany()
    .HasForeignKey(child => child.ParentId)
    .WillCascadeOnDelete(false);

就像这样,EF在删除父节点时将子节点的ParentId属性设置为null,这不是我想要的。

如果根据需要配置关系,则可以使用:

modelBuilder.Entity<Child>()
    .HasRequired<Parent>(child => child.Parent)
    .WithMany()
    .HasForeignKey(child => child.ParentId)
    .WillCascadeOnDelete(false);

这会抛出异常,这将是所需的行为。但这种关系必须是可选的。使用Code First可以使用EF 4.3.1吗?

1 个答案:

答案 0 :(得分:1)

没有。这是可选和必需之间的区别。必需=必须具有主记录,如果删除主记录而没有级联,则会出现异常。 Optional =不需要主记录,如果删除没有级联的主记录,则FK设置为​​null。

如果您还需要其他任何东西,您必须自己处理。