我正在使用nhibernate,而且我寫了一個linq查詢,並且它沒有返回我期望的結果。First/FirstOrDefault無法正常工作
public ParentA()
{
public virtual Id {get; set;}
public virtual Name {get; set;}
public virtual IList<ChildA> ChidrenA {get; set;}
public ParentA()
{
ChidrenA = new List<ChildA>();
}
}
public ChildA()
{
public virtual Id {get; set;}
public virtual Name {get; set;}
public virtual IList<ChildB> ChidrenB {get; set;}
public virtual ParentA ParenteA {get; set;}
public ChildA()
{
ChidrenB = new List<ChildB>();
}
}
public ChildB()
{
public virtual Id {get; set;}
public virtual Name {get; set;}
public virtual ChildA {get; set;}
}
上面的代碼是我的域名。流利的nhibernate將是非常基本的,沒有什麼特別的,所以我沒有包括它。
查詢我是
base.unitOfWork.Session.Query<ParentA>()
.Where(x => x.Id == parentAId)
.FetchMany(x => x.ChildrenA)
.ThenFetchMany(x => x.ChildrenB)
.FirstOrDefault();
我希望發生
它會找到1或0的父記錄。如果確實找到了一條記錄,它將急切地加載所有ChildrenA,然後加載所有ChildrenB。
發生了什麼
它發現1或0的父記錄。然後它只需要1或0條記錄給ChildrenA和ChildrenB。
爲什麼只爲兒童A和兒童B取得第一個記錄?
如果我將FirstToDefault()
更改爲.toList()
我收到了我所期望的一切,但我發現它毫無意義,因爲應該只有一條記錄帶有該父記錄。
您是否曾嘗試將FirstOrDefault放在Where,但在FetchMany語句之前? –
@AaronHawkins - 你不能那樣做。如果我這樣做,那麼我不能使用Fetches。 – chobo2