據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