我有一些代码做了2次session.Get(id)在同一个ISession上。我可以看到ISession创建了2个idbconnections。我想这是因为某种配置。我希望它在同一个idbconnection上进行获取。怎么样?
答案 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下完成的 交易,强烈反对 没有使用会话的任何使用 事务。