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

Nhibernate 保存单个实体而不是整个上下文-重新访问,nhibernate,entity-framework,Nhibernate,Entity Framework,我正在寻找一种方法,可以对使用实体框架而不是整个ObjectContext.SaveChanges()保存的内容进行细粒度控制。我的场景非常简单,我很惊讶EF没有满足我的需求——在NHibernate和我见过的所有其他数据访问范例中都非常基本。我正在生成一组数据(在WPF UI中),并允许用户微调建议的内容并选择实际提交给数据库的内容。对于提议的实体,我: 通过objectcontext获取大量引用实体(如语言) 创建建议的实体并将这些引用实体指定给它们(作为导航属性),因此,由于它们与引用实体

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

  • 通过objectcontext获取大量引用实体(如语言)
  • 创建建议的实体并将这些引用实体指定给它们(作为导航属性),因此,由于它们与引用实体的关系,它们被隐式添加到ObjectConText
  • 尝试基于建议的实体创建和保存单个实体 我觉得这应该是非常简单和琐碎的,但我所尝试的一切我都遇到了麻烦,要么我设置了另一个objectcontext,然后只添加我需要的实体(然后它尝试添加整个图形,但由于它位于另一个objectcontext上而失败)。我尝试了MergeOptions=NoTracking我的引用实体,试图让Attach/AddObject不通过这些实体导航来创建一个图形,但没有效果。我已经从引用实体中删除了导航属性。我已经尝试了可接受的更改,这很有效,但在实践中却毫无用处,因为我仍然希望跟踪和保存其他实体。在一个简单的测试中,我可以创建我建议的两个实体,添加我想要保存的实体,然后分离我不想保存的实体,然后调用SaveChanges,这很有效,但在实践中也不是很好。下面是一些漂亮想法的链接,这些想法最终没有帮助,但却说明了EF对于如此简单的事情的复杂性。我真的在寻找一种SaveSingle/SaveAtomic方法,并且认为它对于任何DAL来说都是一个非常合理和基本的要求,更不用说一个尖端的ORM了

    • www.codeproject.com/KB/architecture/attachobjectgraph.aspx?fid=1534536&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=3071122&fr=1
    • bernhardelbl.spaces.live.com/blog/cns!DB54AE2C5D84DB78!238.进入

    我会自己回答这个问题,因为我还没有找到EF1的解决方案。EF4将允许您使用自跟踪实体实现这一点,也就是说,您需要使用T4模板滚动您自己的类,这样就有了一点学习曲线(请参阅最后的链接)

    现在,我们已经决定给我们的域对象接口(这让我很恼火,因为我真的很喜欢在nhibernate/wcf中使用poco类,这就扼杀了这种需要),并实现“建议的”实体,直到用户决定提交到数据库,在这一点上我们映射到一个EntityObject

    这里有一些实际答案: