根据this question and corresponding answers,强烈建议NHibernate甚至在阅读操作中使用事务。我不确定何时发送数据。 想象一下,我们从MSQL Server数据库中进行了简单的读取操作:
var topics = _topicRepository.Read(0, 10);
其中主题存储库的read方法只返回值的枚举:
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应该运行事务,它将包含单个读操作),而不是将要提交的内容?它不会像交易中的新交易那样吗?在此先感谢您的解释。
答案 0 :(得分:2)
阅读操作将立即进行。如果您想延迟它们,则应考虑使用.ToFuture()
方法。
此外,请确保在使用nhibernate时阅读此(及其他部分)pitfall of nhibernate。