保存单个实体而不是整个上下文 - 重新访问

时间:2009-11-29 20:02:35

标签: nhibernate entity-framework

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

  1. 通过我的objectcontext获取一堆引用实体(例如语言),
  2. 创建提议的实体并将这些引用实体分配给它们(作为导航属性),因此,由于它们与引用实体的关系,它们被隐式添加到objectconext
  3. 试图创造&根据提议的实体保存个人意见。
  4. 我认为这应该非常简单&琐碎,但我尝试过的所有东西我都碰到了一堵砖墙,或者我设置了另一个对象上下文&只添加我需要的实体(然后尝试添加整个图形并失败,因为它在另一个objectcontext上)。我已经在我的引用实体上尝试了MergeOptions = NoTracking来尝试让Attach / AddObject不通过这些来创建图形,但没有用。我已从参考实体中删除了导航属性。我已经尝试过AcceptAllChanges,它在实践中起作用但是很无用,因为我仍然想跟踪&保存其他实体。在一个简单的测试中,我可以创建我提出的两个实体,AddObject是我要保存的实体,然后分离我不调用SaveChanges的实体,这在实践中再次起作用。下面是一些关于一些漂亮想法的链接,这些想法最终对最终没有帮助,但说明了EF的复杂性。我真的在寻找SaveSingle / SaveAtomic方法,并认为这是一个非常合理的方法。基本要求任何DAL,letalone是最前沿的ORM。

1 个答案:

答案 0 :(得分:1)

我自己会回答这个问题 - 我发现EF1没有解决方法。 EF4将允许您使用自跟踪实体实现此功能,即。你需要使用T4模板滚动你自己的类,所以那里有一点学习曲线(参见最后的链接)。

现在,我们决定给我们的域对象接口(这让我感到很烦恼,因为我真的喜欢使用nhibernate / wcf中的poco类来解决这个问题的需要)并实现我们使用的'拟议'entites用户决定提交到数据库,此时我们映射到EntityObject。

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