摆脱UoW的隐含性

时间:2011-07-09 19:53:30

标签: nhibernate entity-framework

NHibernate的Session和EF的ObjectContext是工作单元模式的实现,并建议类似的变更跟踪方法:检索一些实体,然后以某种方式修改它们,然后调用SaveChanges / SubmitChanges / Save / etc。

我不喜欢这种方法的隐含性。我不喜欢该实体修改自动意味着它将被保存。我想明确标记应该保存的实体。在NHibernate或EF中实现这种控制的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

(注意:幸运的是我从未处理过EF;我的答案仅限于NH) 我认为你最初的假设是错误的:

  

自动修改实体   意味着它将被保存

那不是真的;为了坚持你所做的改变,你需要:

  1. 自己调用Session.Flush()
  2. 将Session的刷新模式设置为AutoCommit(强烈不推荐)
  3. 使用ITransaction并提交它(迄今为止最好的方法)。
  4. 除非您执行上述任何操作,否则您的更改将不会被保留 就个人而言,我觉得NH让我可以完全控制进入我的数据库的内容。

    here'是一篇好文章。