删除时EF4循环引用问题

时间:2011-01-20 22:36:38

标签: entity-framework-4 self-tracking-entities

您好我正在使用EF 4自我跟踪实体。我有三张表(问卷,章节和页面)如下;

Questionnaire
Id
Title
WhenClosedShowPageId

Section
Id
QuestionnaireId

Page
Id
SectionId

因此,在EF模型中,调查问卷有章节,而章节有页面。 WhenClosedShowPageId是一个可以为null的int,它引用了调查表关闭时显示的页面。所有引用都有关联以维护引用完整性。

当我将所有实体标记为已删除并尝试保存时,问题就出现了。如果在检索数据时WhenClosedShowPageId为null,则删除工作正常。如果将WhenClosedShowPageId设置为某个值,则EF无法计算出要删除的顺序。这是可以理解的。但是,如果我将WhenClosedShowPageId设置为null,将实体标记为已删除并保存,则会发生同样的事情。我希望EF首先生成一个更新语句,将数据库中的WhenClosedShowPageId设置为null,然后再删除实体。

我能看到绕过这个问题的唯一方法就是自己做两次独立的保存,第一次将WhenClosedShowPageId设置为null,第二种是删除实体。这是一个层次分明的应用程序,我不想为此创建一个特殊的案例。

有什么方法吗?

的Darren

1 个答案:

答案 0 :(得分:0)

如果实体已被标记为删除,则实体框架将放弃待处理的编辑。毕竟,如果你摆脱它,首先更新数据有什么意义?不幸的是,这可能会导致您看到的情况。

解决问题的最佳方法是通过WhenClosedShowPageId使关联的两端不级联删除(End1 OnDeleteEnd2 OnDelete设置为None)。由于该页面是调查问卷一部分的一部分,因此最终将被删除,因此您无需担心。