NHibernate JOIN到临时表

时间:2013-10-07 15:30:44

标签: c# sql sql-server nhibernate

我想在SQL中做一些工作,填充临时表,然后使用NHibernate CreateSQLQuery加入到临时表以获得我的最终结果。我们在NHibernate的1.2.0.4000版本上,我似乎在以后的查询中访问临时表时遇到问题,即使我在同一个会话中(我相信这意味着我在同一个SQL Session / Connection中)好)。以下是我的代码的简化版本

public void Work()
{
    SqlConnection connection = (SqlConnection)Session.Connection;

    SqlCommand command = new SqlCommand
                     {
                         CommandType = CommandType.Text,
                         CommandText = "SELECT ID = 1 INTO #TempTable",
                         Connection = connection,
                     };

    if ( Session.Transaction != null && Session.Transaction.IsActive )
    {
        Session.Transaction.Enlist( command );
    }

    command.ExecuteNonQuery();

    // Simplified example, I should have a temp table #TempTable with 1 row containing the values ID = 1

    // trying to fetch a list of Account objects where ID exists in #TempTable.
    // At this point, I get an error "Invalid object name '#TempTable'."
    IList<Account> accounts = Session.CreateSQLQuery(@"
        SELECT *
          FROM Account a
          JOIN #TempTable tt
            ON a.ID = tt.ID")
        .AddEntity("a", typeof(Account))
        .List<Account>();

    // Do some work on accounts list
}

1 个答案:

答案 0 :(得分:2)

会话按需获取连接,不能保证获得相同的连接。 每次都有两种方法可以获得相同的连接:

  • 使用sessionFactory.OpenSession(myConnection);将会话与提供的连接联系起来。
  • 实现IConnectionProvider,用于连接池

选项1绝对容易