在NHibernate事务中读取操作

时间:2012-10-02 11:51:50

标签: c# nhibernate transactions

根据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应该运行事务,它将包含单个读操作),而不是将要提交的内容?它不会像交易中的新交易那样吗?在此先感谢您的解释。

1 个答案:

答案 0 :(得分:2)

阅读操作将立即进行。如果您想延迟它们,则应考虑使用.ToFuture()方法。

此外,请确保在使用nhibernate时阅读此(及其他部分)pitfall of nhibernate