我有一些代码在相同的ISession上做2倍的session.Get(id)。我可以看到ISession创建了2个idbconnection。我猜这是由于某种配置造成的。我希望它在相同的idbconnection上执行fetch。多么?
发布于 2011-03-13 01:06:16
如果两个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假定对数据库的所有访问都是在一个事务下完成的,并强烈建议不要在没有事务的情况下使用会话。
https://stackoverflow.com/questions/5283586
复制相似问题