Entity framework 撤消实体框架中的更改,包括更改为对象引用

Entity framework 撤消实体框架中的更改,包括更改为对象引用,entity-framework,Entity Framework,有几种方法可以撤消实体框架中的更改: 重新创建对象上下文 从上下文中分离/附加 刷新:context.MyEntity.context.Refresh(RefreshMode.StoreWins,myobject) 应用程序有一个选项卡式界面,其中一个选项卡显示不同的实体对象。用户可以向对象添加标记(m:n关系)。我尝试了我能找到的一切,但我无法得到EntityFramework撤消用户对m:n关系所做的更改。 例如,用户添加了一个标记(创建了m:n对象)。如果用户单击“取消”,则对象应保存

有几种方法可以撤消实体框架中的更改:

  • 重新创建对象上下文
  • 从上下文中分离/附加
  • 刷新:context.MyEntity.context.Refresh(RefreshMode.StoreWins,myobject)
应用程序有一个选项卡式界面,其中一个选项卡显示不同的实体对象。用户可以向对象添加标记(m:n关系)。我尝试了我能找到的一切,但我无法得到EntityFramework撤消用户对m:n关系所做的更改。 例如,用户添加了一个标记(创建了m:n对象)。如果用户单击“取消”,则对象应保存到数据库中

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


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

EF中没有撤消更改。您当前的问题更多地是关于应用程序的工作方式以及EF的工作方式。EF应该作为一个工作单元工作——您做了很多更改,要么一起保存,要么一起扔掉

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

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

我认为您是对的。我试图撤销的“工作单元”对于EF来说太复杂了,无法处理。我更改了应用程序,为每个新选项卡使用不同的上下文。所以我现在唯一要解决的就是如何刷新父列表。但这更像是WPF的事情。。。