【发布时间】:2012-10-02 19:55:25
【问题描述】:
根据this question and corresponding answers,强烈建议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 应该运行包含单个读取操作的事务),而不是提交什么?它不会像交易中的新交易吗?提前感谢您的解释。
【问题讨论】:
标签: c# nhibernate transactions