1

您好我正在使用 EF 4 自我跟踪实体。我有如下三个表格(问卷、部分和页面);

Questionnaire
Id
Title
WhenClosedShowPageId

Section
Id
QuestionnaireId

Page
Id
SectionId

因此,在 EF 模型中,问卷调查有部分,部分有页面。WhenClosedShowPageId 是一个可以为空的 int,它引用页面以显示问卷何时关闭。所有引用都有关联以保持引用完整性。

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

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

有没有办法解决?

达伦

4

1 回答 1

0

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

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

于 2011-04-26T23:05:20.040 回答