如何使用存储库模式在事务中保留IQueryable <>?

Dan*_* T. 7 c# linq nhibernate transactions iqueryable

根据NHProf,不鼓励使用隐式交易:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是该方法将在data评估之前提交事务.有没有办法使用存储库模式并保持IQueryable<>显式事务?或者读取操作是否可以使用隐式事务?

Die*_*hon 5

该库应该创建事务.这是一个单独的图层(取决于应用程序类型)的责任.