【发布时间】:2009-09-04 04:34:24
【问题描述】:
我想在 WPF 应用程序中实现每个业务事务模式的对话,如 here 所述。不幸的是,这个应用程序有一个大型现有数据库,在所有表中使用 SQL Server 生成的身份密钥。
我知道向 NHibernate 会话添加一个新对象会导致它被插入,如果它有一个身份密钥。 Fabio 具有在每个请求结束时提交当前事务的模式,即使我们还没有完成整个工作单元。
如果我理解正确,这意味着即使我放弃工作单元,我的对象也将被插入到数据库中并且不会被删除。所以:
- 此模式是否与身份密钥不兼容?
- 是否有任何合理的解决方法?
- 在这种情况下我可以使用更好的模式吗?
编辑#1:
Fabio 的一些其他 cmets 是 here。
编辑#2:
进一步探索使我找到了 persist(...) 方法,它与 save(...) 相似,但差异足以让人困惑。取自hibernate FAQs 的这句话很有意思:
persist() 方法还保证 它不会执行 INSERT 如果在外部调用它,则声明 交易边界。这很有用 在与 扩展会话/持久性上下文。
当然,如果它在事务边界内保证相同,它会更有用吗?我的印象是无论如何都不使用事务。
【问题讨论】:
-
我刚刚尝试了 Session.Persist() 并且它立即执行了插入,尽管我没有打开的事务 - 如果这是它的意思,它不起作用(至少在 2.1 上) .
标签: sql-server nhibernate