我正在使用 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;}
}
上面的代码是我的域。流利的 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 个父记录。然后,ChildrenA 和 ChildrenB 只需要 1 或 0 条记录。
为什么只为 ChildrenA 和 ChildrenB 获取第一个找到的记录?
如果我FirstToDefault()
改为.toList()
我得到我期望的一切,但我发现它没有意义,因为应该只有一个记录与该父记录。