这可能是一个微不足道的问题,但是:因为ADO.NET实体框架自动跟踪(在生成的实体中)更改,因此保留原始值,如何回滚对实体对象所做的更改?
我有一个表单,允许用户在网格视图中编辑一组"客户"实体.
现在我有两个按钮"接受"和"恢复":如果单击"接受",我将调用Context.SaveChanges()
,更改的对象将写回数据库.如果单击"还原",我希望所有对象都能获得其原始属性值.代码是什么?
谢谢
这可能是一个微不足道的问题,但是:因为ADO.NET实体框架自动跟踪(在生成的实体中)更改,因此保留原始值,如何回滚对实体对象所做的更改?
我有一个表单,允许用户在网格视图中编辑一组"客户"实体.
现在我有两个按钮"接受"和"恢复":如果单击"接受",我将调用Context.SaveChanges()
,更改的对象将写回数据库.如果单击"还原",我希望所有对象都能获得其原始属性值.代码是什么?
谢谢
EF中没有恢复或取消更改操作.每个实体在ObjectStateManager
中都有ObjectStateEntry
个.状态条目包含原始值和实际值,因此您可以使用原始值覆盖当前值,但必须 for each 实体手动执行此操作.它不会恢复导航属性/关系中的更改.
"恢复更改"的常用方法是处理上下文并重新加载实体.如果要避免重新加载,必须创建实体的克隆,并在新对象上下文中修改这些克隆.如果用户取消更改,您仍将拥有原始实体.