nhibernate一个会话相同的IDB连接

nhibernate一个会话相同的IDB连接,nhibernate,isession,idbconnection,Nhibernate,Isession,Idbconnection,我有一些代码在同一个会话上执行2次session.Get(id)。我可以看到ISession创建了2个IDB连接。我想这是因为某种配置。我希望它在同一个IDB连接上进行提取。如何执行?如果两个Get操作在同一事务中,它们将共享相同的IDbConnection。否则,您将以隐式事务结束,NHibernate将为每个查询打开和关闭IDbConnection。通常,您应该尝试执行以下操作: using (var tx = session.BeginTransaction()) { var cu

我有一些代码在同一个会话上执行2次session.Get(id)。我可以看到ISession创建了2个IDB连接。我想这是因为某种配置。我希望它在同一个IDB连接上进行提取。如何执行?

如果两个
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();
}
使用(var tx=session.BeginTransaction())
{
var customer=session.Get(123);
var order=session.Get(456);
//做事
tx.Commit();
}
:

当我们没有定义自己的时候 交易,它又回到了 隐式事务模式,其中 数据库的语句以其 自有交易,导致大额 性能成本(数据库运行时间) 构建和分解事务),以及 一致性降低

即使我们只是在读取数据,我们也会 应该使用事务,因为 使用事务可以确保我们得到 来自数据库的一致结果。 NHibernate假设所有访问 数据库是在 交易,并强烈劝阻 未经授权的会话的任何使用 交易


谢谢,迈克尔,这个很好用。但是,如果没有事务,就不可能有长期存在的idbconnections吗?找到它connection.release\u mode=on\u close做我想做的事。