【发布时间】:2010-04-07 06:09:21
【问题描述】:
我正在寻找一种方法来细粒度地控制使用 Entity Framework 保存的内容,而不是整个 ObjectContext.SaveChanges()。我的场景非常简单,我很惊讶在 EF 中没有得到满足——在 NHibernate 和我见过的所有其他数据访问范式中非常基本。我正在生成一堆数据(在 WPF UI 中)并允许用户微调建议的内容并选择实际提交给数据库的内容。对于提议的实体,我是:
- 通过我的 objectcontext 获取一堆引用实体(例如语言),
- 创建提议的实体并将这些引用实体分配给它们(作为导航属性),因此由于它们与引用实体的关系,它们被隐式添加到 objectconext
- 尝试根据建议的实体创建和保存单个实体。
我认为这应该非常简单且微不足道,但是我尝试过的所有事情都碰壁了,要么我设置了另一个 objectcontext 并只添加了我需要的实体(然后它尝试添加整个图表但失败了因为它在另一个对象上下文中)。我已经在我的参考实体上尝试了 MergeOptions = NoTracking 以尝试让 Attach/AddObject 不通过这些导航来创建图表,但无济于事。我已经从参考实体中删除了导航属性。我已经尝试过 AcceptAllChanges,它有效,但在实践中毫无用处,因为我仍然想跟踪和保存其他实体。在一个简单的测试中,我可以创建 2 个我建议的实体,AddObject 是我想要保存的一个,然后分离我不调用 SaveChanges 的那个,这可行,但在实践中又不是很好。以下是一些漂亮想法的链接,这些想法最终无济于事,但说明了 EF 对于如此简单的事情的复杂性。我真的在寻找 SaveSingle/SaveAtomic 方法,并且认为这对于任何 DAL 来说都是一个非常合理和基本的要求,更不用说尖端的 ORM。
- Saving a single entity instead of the entire context
- 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.entry
【问题讨论】:
标签: nhibernate entity-framework