我有一个桌面客户端应用程序,它使用模式窗口来设置分层对象的属性。由于这是一个客户端应用程序,并且对 DbContext 的访问不是线程化的,因此我在主表单上使用了一个长期运行的上下文,该上下文被传递给模态子项。
这些模式窗口使用 PropertyGrid 显示实体属性,并且还具有取消按钮。如果修改了任何数据并按下了取消按钮,则更改将反映在父表单中(我无法在父表单中处理DbContext object
).
有没有办法放弃所做的任何更改,如果DbContext.SaveChanges()
方法尚未被调用?
UPDATE:实体框架版本 4.4。
public void RejectChanges()
{
foreach (var entry in ChangeTracker.Entries())
{
switch (entry.State)
{
case EntityState.Modified:
case EntityState.Deleted:
entry.State = EntityState.Modified; //Revert changes made to deleted entity.
entry.State = EntityState.Unchanged;
break;
case EntityState.Added:
entry.State = EntityState.Detached;
break;
}
}
}
Update:
一些用户建议添加.ToList()
以避免“集合已修改”异常。
但我相信这种例外是有原因的。
你如何得到这个异常?您可能正在以非线程安全的方式使用上下文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)