【问题标题】:NHibernate and Raw ADO.NET usageNHibernate 和原始 ADO.NET 的使用
【发布时间】:2010-09-24 00:57:29
【问题描述】:

背景:我在一个 ASP.NET MVC 应用程序中使用 Nhibernate,它具有视图中的开放会话模式,我需要使用原始 ADO.NET 来执行一些性能关键的数据库操作。

我对如何获取连接实例感到有些困惑,因为我在许多博客文章中看到了两种不同的方法。

我要使用吗:

var connection = Session.Connection;

或者:

var connection = ((ISessionFactoryImplementor)sessionFactory).ConnectionProvider.GetConnection();

我似乎无法在任何地方找到一个决定性的答案,我希望具有丰富 NHibernate 经验的人可以在这里加入。

【问题讨论】:

    标签: nhibernate ado.net


    【解决方案1】:

    如果您已经有一个会话,请使用来自它的连接。

    这也将允许您通过征用您的命令来共享交易(如果有的话)。

    【讨论】:

    • 是否可以在完全不涉及 NHibernate 的情况下使用此连接使用完全不同的事务?理想情况下,我想使用 READ UNCOMMITTED 隔离级别,因为读取操作对性能非常敏感。
    • @DanP 如果您不想与 NH 分享任何内容,为什么要引用它?您可以只使用相同的连接字符串...在任何情况下,您也可以在开始 NH 事务时指定IsolationLevel.ReadUncommitted...
    【解决方案2】:

    我正在使用一些东西(也使用底层已经打开的事务)

    SqlCommand command = new SqlCommand(updateString, (SqlConnection)NHibernateSession.Connection);
    command.Parameters.AddRange(parameters.ToArray());
    
    try
    {
        ITransaction tx = NHibernateSession.Transaction;
        tx.Enlist(command);
        command.ExecuteNonQuery();
    }
    catch (SqlException)
    {
        NHibernateSessionManager.Instance.RollbackTransaction();
        throw;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多