您好我正在使用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
答案 0 :(得分:0)
如果实体已被标记为删除,则实体框架将放弃待处理的编辑。毕竟,如果你摆脱它,首先更新数据有什么意义?不幸的是,这可能会导致您看到的情况。
解决问题的最佳方法是通过WhenClosedShowPageId使关联的两端不级联删除(End1 OnDelete
和End2 OnDelete
设置为None
)。由于该页面是调查问卷一部分的一部分,因此最终将被删除,因此您无需担心。