c# – 实体框架 – 部分提交

如果Entity Framework中有任何方法可以保存对数据库的某些更改而不是其他更改,我一直想知道.想象一下,我让我们说4个实体类 – Customer,Task,SalesSchema和Address.每个人都是客户一对多的关系.现在我创建一个包含3个选项卡的窗口(使用TabControl),每个选项卡都有一个DataGridView,列出地址,任务和销售模式,以及每个按钮(添加,修改,删除)以处理每个实体类型的详细信息.

我想要做的是允许部分更改提交到数据库,例如.用户添加任务 – >当用户点击保存更改时,它应该立即保存,但只应保存活动选项卡中的更改. (不要问我为什么要这样做 – 这是客户想要的)

现在通过创建单独的数据上下文并分别提交每个数据上下文来实现它,但我想知道是否有另一种方法可以做到这一点 – 使用一个对象上下文.

在ADO.NET数据集中,有一种方法可以单独提交更改 – 获取更改,执行一些必要的工作人员甚至拒绝更改.

这可能与ADO.NET实体框架一起使用吗?

最佳答案 我不确定我是否正确/完全理解您的问题,但大多数要求应该轻松地用一个上下文处理.下面是将某个类型的所有对象恢复到其原始状态的简单示例,如果您在此之后调用上下文中的SaveChanges() – 只有处于已添加或更改状态的其余对象将提交 – 部分提交.

foreach (System.Data.Objects.ObjectStateEntry x in MyEntity.ObjectStateManager.GetObjectStateEntries(EntityState.Added)) // or modified for that matter.
{
   if (x.EntityKey != null)
   {  
      if (x.Entity is MyClass) // look haven't tested this code, merely example and may have typo's
      {
         MyClass tmpObject = (MyClass)x.Entity;
         MyEntity.Refresh(RefreshMode.StoreWins, x);
      }
   }
}

我想要了解的一点是,如果你跟踪你想要“部分”提交的项目,你可以使用很多控件.您希望恢复到原始状态或丢弃的那些可以从上下文中恢复或甚至完全删除.

不确定这是否有帮助.祝你好运.

点赞