0

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

4

1 回答 1

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();
}

不鼓励使用隐式事务

当我们不定义自己的事务时,它会退回到隐式事务模式,其中对数据库的每条语句都在自己的事务中运行,从而导致很大的性能成本(数据库构建和拆除事务的时间),并降低了一致性.

即使我们只是读取数据,我们也应该使用事务,因为使用事务可以确保我们从数据库中获得一致的结果。NHibernate 假定对数据库的所有访问都是在事务下完成的,并且强烈反对在没有事务的情况下使用任何会话。

于 2011-03-12T17:06:15.557 回答