【发布时间】:2013-05-02 11:18:51
【问题描述】:
我有一个桌面客户端应用程序,它使用模式窗口来设置分层对象的属性。由于这是一个客户端应用程序并且对 DbContext 的访问不是线程化的,因此我在主窗体上使用了一个长时间运行的上下文,该上下文被传递给模态子级。
这些模式窗口使用 PropertyGrid 来显示实体属性,并且还具有取消按钮。如果修改了任何数据并按下了取消按钮,则更改会反映在父表单中(我无法处理 DbContext object)。
如果没有调用 DbContext.SaveChanges() 方法,有没有办法放弃所做的任何更改?
更新:实体框架版本 4.4。
【问题讨论】:
-
应用程序不会在其整个生命周期中保留 DbContext 对象。编辑分层对象也是需要编辑子级的工作单元。就我而言,我被模态窗口和连接/附加实体卡住了。
-
在模态窗口中使用 DTO(或已编辑对象的克隆)。取消编辑后,只需丢弃 DTO,原始对象不会发生任何事情。当您要保存时,首先将 DTO 值复制到原始对象并保存更改。
-
@GertArnold:随着时间的推移,你的建议比在实体类上执行杂技更有效。
标签: c# .net entity-framework dbcontext undo