Castle ActiveRecord + NHibernate 中的交易傻瓜
Posted
技术标签:
【中文标题】Castle ActiveRecord + NHibernate 中的交易傻瓜【英文标题】:Transactions in Castle ActiveRecord + NHibernate for dummies 【发布时间】:2010-01-23 11:39:29 【问题描述】:我想在单个原子事务中执行以下操作:
-
通过 ActiveRecord 读取对象
通过 ActiveRecord 保存新对象
通过 NHibernate 更新另一个表
另外,如果在我完成交易时,我在步骤 1 中读取的对象的值发生了变化,我希望交易失败。
我以前从未在 AR 或 NH 中使用过交易,因此请提供尽可能多的详细信息。交易机制如何协同工作?
【问题讨论】:
【参考方案1】:好吧,Castle ActiveRecord 依赖于 NHibernate。的确,Castle ActiveRecord Transaction 类与 NHibernate 上的不同;但您应该将 ActiveRecord 视为 NHibernate 中的包装器。
所以没有必要“一起玩”。因为,在内心深处,它们是相同的。
另一个重要的概念是“会话”。 “会话”是一个工作单元,一个用于告诉 NHibernate 你想要做什么的“窗口”:查询、更新、插入等。同样,还有一个 NHibernate 会话和一个 Castle ActiveRecord 会话。同样,后者是第一个的包装。
这很重要,因为当您在 ActiveRecord 中使用会话时(实际上您总是这样做,即使是隐式的),可以访问其中的“隐藏”NHibernate 会话;通常使用传递给 Execute 方法的委托。这就是您可以在应用程序中使用这两种代码的方式(请参阅Execute Callback example here)。
为了更好地理解会话含义,see here。
最后,我建议您始终使用 ActiveRecord 的样式来声明会话和事务,即使在混合两种编码样式时也是如此。因为它们也代表 NHibernate 会话和事务,所以你是安全的。为了更好地理解这一点,请read here。
PS:是的,我没有写你要求的例子(太懒了),但我认为如果你写它会对你的学习过程更好。相信我,这比你想象的要容易。
【讨论】:
【参考方案2】:这是一个新项目的快速入门(最近几周创建的)
https://github.com/haf/Castle.Facilities.NHibernate/wiki/NHibernate-Facility---Quick-Start
【讨论】:
以上是关于Castle ActiveRecord + NHibernate 中的交易傻瓜的主要内容,如果未能解决你的问题,请参考以下文章
Castle ActiveRecord + NHibernate 中的交易傻瓜
在 Castle ActiveRecord 中按 ID 选择