nhibernate one isession相同的idbconnection

时间:2011-03-12 15:56:08

标签: nhibernate isession idbconnection

我有一些代码做了2次session.Get(id)在同一个ISession上。我可以看到ISession创建了2个idbconnections。我想这是因为某种配置。我希望它在同一个idbconnection上进行获取。怎么样?

1 个答案:

答案 0 :(得分:1)

如果两个Get操作都在同一个事务中,则它们将共享相同的IDbConnection。否则你最终会得到隐式事务,NHibernate将为每个查询打开和关闭IDbConnection。一般来说,你应该尝试做类似的事情:

using (var tx = session.BeginTransaction())
{
    var customer = session.Get<Customer>(123);
    var order = session.Get<Order>(456);

    // do stuff

    tx.Commit();
}

Use of implicit transactions is discouraged

  

当我们没有定义自己的时候   交易,它回归   隐式事务模式,其中每一个   对数据库的语句在其中运行   自己的交易,导致很大   性能成本(数据库时间到   建立和拆除交易),和   一致性降低。

     

即使我们只是阅读数据,我们也是   应该使用交易,因为   使用交易确保我们得到   来自数据库的一致结果。   NHibernate假定所有访问权限   数据库是在a下完成的   交易,强烈反对   没有使用会话的任何使用   事务。