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学习

Castle ActiveRecord学习

Castle ActiveRecord + NHibernate 中的交易傻瓜

在 Castle ActiveRecord 中按 ID 选择

Castle.ActiveRecord.PropertyAttribute.NotNull ...文档错误?

使用 Castle ActiveRecord 进行聚合查询