0

根据this question和相应的答案,强烈建议NHibernate即使是读取操作也使用事务。我不确定何时获取数据。想象一下,我们有一个简单的 MSQL Server 数据库读取操作:

var topics = _topicRepository.Read(0, 10);

其中主题存储库的读取方法只返回值的枚举:

public IEnumerable<Topic> Read(int beginIndex, int amount)
{
    return _session.Query<Topic>().Skip(beginIndex).Take(amount);
}

据我了解,NHibernate 不会从数据库中提取值(根据延迟初始化),直到我们调用 ToList() 或对数据进行任何其他操作。但是,当我们将此Read调用包装到事务中并通过调用 ToList() 获取数据直到事务提交时会发生什么?

transaction.Begin();
var topics = _topicRepository.Read(0, 10).ToList();
transaction.Commit();

调用 ToList() 将立即发出数据库请求(这意味着 NHibernate 应该运行事务,其中将包含单个读取操作),而不是提交什么?它不会像交易中的新交易吗?提前感谢您的解释。

4

1 回答 1

2

读取操作将立即进行。如果你想推迟它们,你应该考虑使用该.ToFuture()方法。

另外,请确保您在使用 nhibernate 时阅读了 nhibernate 的这个(以及它的其他部分)陷阱。

于 2012-10-02T11:55:25.043 回答