根据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 应该运行事务,其中将包含单个读取操作),而不是提交什么?它不会像交易中的新交易吗?提前感谢您的解释。