【发布时间】:2013-02-06 02:06:57
【问题描述】:
我正在使用 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() 我会得到我所期望的一切,但我发现这毫无意义,因为该父记录应该只有一条记录。
【问题讨论】:
-
您是否尝试过将 FirstOrDefault 放在 Where 之后,但在 FetchMany 语句之前?
-
@AaronHawkins - 你不能那样做。如果我这样做了,我就不能使用 Fetches。
标签: c# linq nhibernate