nhibernate を使用しており、linq クエリを作成しましたが、期待どおりの結果が返されません。
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;}
}
上記のコードは私のドメインです。Fluent nhibernate は非常に基本的なものであり、特別なことは何も行われていないため、含めていません。
私が持っているクエリは
base.unitOfWork.Session.Query<ParentA>()
.Where(x => x.Id == parentAId)
.FetchMany(x => x.ChildrenA)
.ThenFetchMany(x => x.ChildrenB)
.FirstOrDefault();
私が期待したこと
1 つまたは 0 の親レコードが見つかります。1 つのレコードが見つかった場合は、すべての ChildrenA を熱心にロードし、次にすべての ChildrenB をロードします。
何が起こっている
1 個または 0 個の親レコードが見つかります。次に、ChildrenA と ChildrenB のレコードを 1 つまたは 0 つだけ取得します。
ChildrenA と ChildrenB の最初に見つかったレコードのみを取得するのはなぜですか?
に変更FirstToDefault()
する.toList()
と、期待どおりのものがすべて得られますが、その親レコードを持つレコードは 1 つだけであるため、無意味であることがわかります。