3

所有,城堡活动记录会话范围与交易范围和连接管理

在NHibernate中,我看到了很多代码写成:

using(ISession sess = factory.OpenSession()) { 
using(ITransaction trans = sess.BeginTransaction()) { 
    // query, or save 
    trans.Commit(); 

}}

开始交易的查询,甚至单个实体更新总是困惑我为什么?然后,看完之后我了解到,如果按照这个模式,你将得到2个好处:

  1. 自动连接释放
  2. 自动冲水

很公平。 我的问题是关于Castle ActiveRecord和连接池。

我正在使用ASP.NET应用活动记录,以及常见的模式是创建整个请求的会话。

我的问题是:

1. 我应该使用SessionScope或TransactionScope的(和使用开始/结束交易获得/释放我的连接),使我达到高效的连接池, - 即。我只想在持久性逻辑期间坚持数据库连接(ADO.net连接对象),而不是在请求的整个生命周期内(使用由上述nhibernate事务实现的连接语义)?

2. 不SessionScope刷新当它超出范围(即在其Dispose方法)?

LK(已回答):是的,除非范围是只读的。

3. 不TransactionScope的回滚时,它超出范围(即在其Dispose方法)?

LK(回答):取决于onDispose行动,但默认情况下它提交。

4. 哪里的官方城堡活动记录文件; - 我看到各种网站和各种网站与断开的链接的点点滴滴。是否有像nhibernate或甚至是一本书的官方PDF文档?

回答

1

您可以使用SessionScope。它将为您处理常见的事务语义。当您需要对事务进行更细粒度的控制时,可以使用TransactionScope。您甚至可以在SessionScope中打开一个TransactionScope来处理单个会话中的多个事务。

的官方文档是在这里:
http://docs.castleproject.org/Active%20Record.MainPage.ashx

它也不是很大。
旧的文件是在这里:
http://old.castleproject.org/activerecord/documentation/trunk/index.html

旧的东西是一些主题更好。