实体框架 - 部分提交

时间:2009-10-24 06:02:57

标签: c# entity-framework ado.net

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

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

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

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

ADO.NET实体框架可以实现吗?

2 个答案:

答案 0 :(得分:1)

我的理解是实体框架中的提交已本地化为实体项附加到的数据上下文。如果要在处理其他一些数据时进行部分提交,则可以创建新的数据上下文,加载所需的不相关对象,进行修改并在新数据上下文中提交。您的原始数据上下文和对象应保持不变且未取消配置。

答案 1 :(得分:1)

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

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);
      }
   }
}

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

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