据NHProf,使用隐式事务的气馁:如何在使用存储库模式的事务中保留IQueryable <>?
http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
然而,从数据库中读取对象时NHibernate的LINQ返回IQueryable<>
,这是懒洋洋地评估。我有一个仓库这个方法:
public IQueryable<T> GetAll<T>()
{
using (var transaction = _session.BeginTransaction())
{
var data = _session.Linq<T>();
transaction.Commit();
return data;
}
}
的问题在这里是评估data
之前该方法将提交事务。有没有办法使用存储库模式,并保持IQueryable<>
明确的交易?或者读取操作是否可以使用隐式事务?
为什么要在读操作周围进行事务? – 2010-09-15 19:44:45
啊,从文章中看到:“即使我们只读数据,我们也应该使用一个事务,因为使用事务可以确保我们从数据库中获得一致的结果.NHibernate假定对数据库的所有访问都是在一个事务中完成的,强烈不鼓励在没有交易的情况下使用会话。“但是,我完全不明白为什么作者正在做出这种声明。 – 2010-09-15 19:52:37