【问题标题】:Saving a single entity instead of the entire context - revisited保存单个实体而不是整个上下文 - 重新审视
【发布时间】:2010-04-07 06:09:21
【问题描述】:

我正在寻找一种方法来细粒度地控制使用 Entity Framework 保存的内容,而不是整个 ObjectContext.SaveChanges()。我的场景非常简单,我很惊讶在 EF 中没有得到满足——在 NHibernate 和我见过的所有其他数据访问范式中非常基本。我正在生成一堆数据(在 WPF UI 中)并允许用户微调建议的内容并选择实际提交给数据库的内容。对于提议的实体,我是:

  1. 通过我的 objectcontext 获取一堆引用实体(例如语言),
  2. 创建提议的实体并将这些引用实体分配给它们(作为导航属性),因此由于它们与引用实体的关系,它们被隐式添加到 objectconext
  3. 尝试根据建议的实体创建和保存单个实体。

我认为这应该非常简单且微不足道,但是我尝试过的所有事情都碰壁了,要么我设置了另一个 objectcontext 并只添加了我需要的实体(然后它尝试添加整个图表但失败了因为它在另一个对象上下文中)。我已经在我的参考实体上尝试了 MergeOptions = NoTracking 以尝试让 Attach/AddObject 不通过这些导航来创建图表,但无济于事。我已经从参考实体中删除了导航属性。我已经尝试过 AcceptAllChanges,它有效,但在实践中毫无用处,因为我仍然想跟踪和保存其他实体。在一个简单的测试中,我可以创建 2 个我建议的实体,AddObject 是我想要保存的一个,然后分离我不调用 SaveChanges 的那个,这可行,但在实践中又不是很好。以下是一些漂亮想法的链接,这些想法最终无济于事,但说明了 EF 对于如此简单的事情的复杂性。我真的在寻找 SaveSingle/SaveAtomic 方法,并且认为这对于任何 DAL 来说都是一个非常合理和基本的要求,更不用说尖端的 ORM。

【问题讨论】:

    标签: nhibernate entity-framework


    【解决方案1】:

    我会自己回答这个问题 - 到目前为止,我还没有找到 EF1 的解决方案。 EF4 将允许您使用自跟踪实体来实现这一点,即。您需要使用 T4 模板来创建自己的课程,因此那里有一些学习曲线(请参阅最后的链接)。

    现在,我们决定为我们的域对象提供接口(这让我很恼火,因为我真的很喜欢在 nhibernate/wcf 中使用 poco 类,这消除了对此的需求)并实现了我们使用 til用户决定提交到数据库,此时我们映射到一个 EntityObject。

    这里有一些实际答案:
    http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/32b04a36-0579-4d6f-af48-9cb670a3d9ff

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多