asp.net - CaSTLe Activerecord session 范围与事务范围和连接管理

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

全部,

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

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

}}

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

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

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

    我的问题是:

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

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

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

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

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

    4.
    CaSTLe Active Record 的官方文档在哪里? - 我在各个站点和各个站点的链接断开的站点上都看到了点点滴滴。是否有像 nhibernate 甚至一本书这样的官方 PDF 文档?

    最佳答案

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

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

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

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

    关于asp.net - CaSTLe Activerecord session 范围与事务范围和连接管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454358/

    相关文章:

    asp.net - Windows 和匿名身份验证并排

    nhibernate - 为什么 NHibernate 不先删除孤儿呢?

    C#模拟器 'To Many Connections'

    c# - FirstOrDefault 在与 QueryOver 的连接中

    c# - Quartz.net 调度程序内存泄漏

    python - Docker python 使用 ODPI-C 进行 Oracle 数据库连接

    oracle - 数据库连接断开时在经典ASP中使用自定义错误消息

    基于 Asp.Net MVC 操作的自定义授权

    c# - 如何将 CreateUserWizard 中额外添加的字段的信息保存在与 Membership 数据库不同的单独数据库中?

    c# - 使用 MySQL reader 填充多个 DropDownList