代码之家  ›  专栏  ›  技术社区  ›  kubal5003

实体框架-部分提交

  •  4
  • kubal5003  · 技术社区  · 15 年前

    一段时间以来,我一直在想,实体框架中是否有任何方法可以保存对数据库的某些更改,而其他方法则没有。假设有一种情况,我假设有4个实体类——客户、任务、销售模式和地址。每一个都是客户一对多的关系。现在,我创建了一个有3个选项卡的窗口(使用TabControl),每个选项卡都有一个DataGridView,其中列出了地址、任务和销售模式,还为每个按钮(添加、修改、删除)处理每个实体类型的详细信息。

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

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

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

    ADO.NET实体框架是否可以实现这一点?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Microdot    15 年前

    我不确定我是否正确/完整地理解了您的问题,但是大多数需求应该在一个上下文中轻松处理。下面是将某个类型的所有对象还原为其原始状态的简单示例,如果在此之后要在上下文中调用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);
          }
       }
    }
    

    我试图理解的一点是,如果你跟踪那些你想要“部分”提交的项目,你可以有很多的控制权。您想要恢复到原始状态或放弃的那些可以被恢复,甚至完全从上下文中删除。

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

        2
  •  1
  •   Odd    15 年前

    我的理解是,实体框架中的提交局限于实体项所附加到的数据上下文。如果您想在处理其他一些数据时进行部分提交,那么您可以创建一个新的数据上下文,加载所需的不相关对象,进行修改并在新的数据上下文上提交。您的原始数据上下文和对象应该保持原样和未被提交。