我正在處理N + 1問題,我想在特定的查詢中加載一個集合,但我得到了「未能懶惰地初始化集合」錯誤,或者查詢保持延遲加載。Fetch Eager NHibernate未能懶洋洋地初始化一個集合
我嘗試了很多stackmembers給出的建議,但都沒有成功。
我的實體例如:
public class Bar
{
private _IList<Foo> _fooList;
public IEnumerable<Foo> FooList {get{return _fooList;} }
}
地圖例如:
HasMany(d => d.FooList)
.Access.CamelCaseField(Prefix.Underscore)
.KeyColumn("IdBar")
.Cascade.AllDeleteOrphan()
.Inverse();
查詢拋出錯誤(無法懶洋洋地初始化集合):
var test = GetSession().Query<Bar>()
.Fetch(b => b.FooList);
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.List();
查詢後仍有N + 1問題:
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinQueryOver<Foo>(d => d.FooList)
.Where(f => f.Active).List<Bar>();
Foo fooAlias = null;
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinAlias(d => d.FooList,() => fooAlias)
.List();
我需要幫助解決這個N + 1問題,急於加載FooList集合。
不,我不知道如何使用HQL呢。我會搜索它 – TiagoBrenck
根據我的經驗,最好使用HQL,因爲有時很難用流暢的方法對某種查詢進行建模。我會使用HQL,稍後解決問題,一旦它發生在其中。 –