2011-01-20 53 views
1

您好我正在使用EF 4自我跟踪实体。我有三个表格(问卷,部分和页面)如下:删除时EF4循环引用问题

Questionnaire 
Id 
Title 
WhenClosedShowPageId 

Section 
Id 
QuestionnaireId 

Page 
Id 
SectionId 

因此,在EF模型问卷中有章节和章节有页。 WhenClosedShowPageId是一个可为空的int,它引用页面以显示调查问卷关闭时的情况。所有参考文献都有关联以保持参照完整性。

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

我可以看到解决这个问题的唯一方法是自己做两次独立保存,第一次将WhenClosedShowPageId设置为null,第二次删除实体。这是一个非常分层的应用程序,但我不想为此创建特殊情况。

有没有办法解决这个问题?如果实体已被标记为删除

达伦

回答

0

实体框架将丢弃挂起的编辑。毕竟,如果你摆脱了它,首先更新数据有什么意义?不幸的是,这可能会导致你看到的状况。

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