这可能是一个微不足道的问题,但是:因为ADO.NET实体框架自动跟踪(在生成的实体中)更改,因此保留原始值,如何回滚对实体对象所做的更改?

我有一个表单,允许用户在网格视图中编辑一组"客户"实体.

现在我有两个按钮"接受"和"恢复":如果单击"接受",我将调用Context.SaveChanges(),更改的对象将写回数据库.如果单击"还原",我希望所有对象都能获得其原始属性值.代码是什么?

谢谢

推荐答案

EF中没有恢复或取消更改操作.每个实体在ObjectStateManager中都有ObjectStateEntry个.状态条目包含原始值和实际值,因此您可以使用原始值覆盖当前值,但必须 for each 实体手动执行此操作.它不会恢复导航属性/关系中的更改.

"恢复更改"的常用方法是处理上下文并重新加载实体.如果要避免重新加载,必须创建实体的克隆,并在新对象上下文中修改这些克隆.如果用户取消更改,您仍将拥有原始实体.

.net相关问答推荐

找不到包Microsoft.VisualStudio.Azure.Containers.Tools.Targets

节省用户在整个应用程序中使用的Flutter

EFCore.DbSet.Update 方法添加新行而不是更新它

如何在 .net MAUI 中删除不需要编译的平台?

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

C# 中的批量更新

什么是表达式树,如何使用它们,为什么要使用它们?

有什么方法可以使用 .NET 应用程序使用 git 吗?

LINQ:确定两个序列是否包含完全相同的元素

如何在 C# 4.0 中使任务进入睡眠状态(或延迟)?

使用多个 MemoryCache 实例

如何等到远程 .NET 调试器附加

[DllImport("QCall")] 是什么?

创建多个线程并等待所有线程完成

将字典值转换为数组

如何过滤具有多个条件的 Directory.EnumerateFiles?

.NET 配置文件 configSource 在应用程序目录文件夹之外

铸造:(NewType)与对象作为NewType

如何隐藏 WPF ListView 的标题?

在 IIS 中访问 .svc 文件时出现 HTTP 404