城堡活动记录会话范围与交易范围&连接管理

时间:2012-07-12 14:43:13

标签: asp.net nhibernate database-connection castle-activerecord

所有

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

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

}}

启动查询甚至单个实体更新的事务总是困惑我为什么?然后在阅读后我了解到,如果你遵循这种模式,你将获得2个好处:

  1. 自动连接释放
  2. 自动冲洗
  3. 足够公平。 我的问题是关于Castle ActiveRecord和连接池。

    我在ASP.NET应用程序中使用Active Record,常见的模式是为整个请求创建会话。

    我的问题是:

    1。 我应该使用SessionScope或TransactionScope(并使用开始/结束事务来获取/释放我的连接),以便实现有效的连接池,即。我想在持久化逻辑期间保持数据库连接(ADO.net连接对象),而不是请求的整个生命周期(使用上面提到的nhibernate事务实现的连接语义)?

    2。 SessionScope超出范围时是否会刷新(即在其Dispose方法中)?

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

    3。 TransactionScope超出范围时是否会回滚(即在其Dispose方法中)?

    LK(已回答):取决于onDispose操作,但默认情况下会提交。

    4。 官方城堡活动记录文件在哪里, - 我看到各个网站上的点点滴滴和链接断开的各个网站。是否有像nhibernate甚至是书籍的官方PDF文档?

1 个答案:

答案 0 :(得分:1)

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

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

这不是很好 旧文件在这里:
http://old.castleproject.org/activerecord/documentation/trunk/index.html

旧的东西对某些主题更好。