【问题标题】:Castle Active Record Session Scope vs Transaction Scope & Connection ManagementCastle Activerecord 会话范围与事务范围和连接管理
【发布时间】:2012-07-12 14:43:13
【问题描述】:

全部,

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

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

}}

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

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

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

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

我的问题是:

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

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

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

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

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

4。 Castle Active Record 的官方文档在哪里? - 我在各个站点和链接断开的各个站点上看到了一些零碎的东西。有没有像 nhibernate 甚至一本书这样的官方 PDF 文档?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    旧的东西更适合某些主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      相关资源
      最近更新 更多