3

有几种方法可以撤消 Entity Framework 中的更改:

  • 重新创建对象上下文
  • 从上下文中分离/附加
  • 刷新:context.MyEntity.Context.Refresh(RefreshMode.StoreWins, myobject);

该应用程序有一个选项卡式界面,其中一个选项卡显示不同的实体对象。用户可以将标签添加到对象(m:n 关系)。我尝试了我能找到的一切,我无法让实体框架撤消用户对 m:n 关系所做的更改。例如,用户添加标签(创建 m:n 对象)。如果用户单击“取消”,则应将对象保存到数据库中。

重新创建上下文可能会导致其他选项卡中的数据丢失。Detach/Attach and Refresh() 仅在对象本身已更改且没有从对象列表中添加/删除的相关对象时才有效。

我曾考虑为每个选项卡使用不同的上下文对象,但这会导致数据不同步(例如,用户单击列表并打开一个新选项卡。更改对象后,列表不会更新自动地)

4

1 回答 1

2

EF 中没有撤消更改。您当前的问题更多是关于您的应用程序的预期工作方式以及 EF 的预期工作方式。EF 预计将作为工作单元工作 - 您进行了很多更改,要么将它们保存在一起,要么将它们一起丢弃。

您的应用程序显然需要不同的模型,因为您只需要还原部分更改。这并不是 EF 的上下文应该处理的内容。此类逻辑应与 EF 分开处理 = 您的 gui 应与未附加到上下文的对象一起使用,并且您应仅在用户决定保存结果时附加实体并定义更改。

上下文中的部分撤消需要您浏览条目ObjectStateManager并恢复创建的更改。对于更改的多对多关系,您必须找到表示关系的状态条目并恢复状态更改。这些条目只能处于添加、删除或未更改状态。您可以将已删除的内容移回未更改的状态,但我目前不确定您是否可以以某种方式分离或删除添加的实例。

于 2012-08-07T10:28:31.533 回答