This question already has answers here:
NHibernate: Why does Linq First() force only one item in all child and grandchild collections with FetchMany()
(2个答案)
6年前关闭。
我正在使用nhibernate,并且写了一个linq查询,它没有返回我期望的结果。
上面的代码是我的域名。流利的nhibernate是非常基础的,没有什么特别的事情,因此我没有将它包括在内。
我的查询是
我期望发生什么
它将找到1或0个父记录。如果确实找到一条记录,它将渴望加载所有ChildrenA,然后加载所有ChildrenB。
怎么了
它找到1或0个父记录。然后,ChildrenA和ChildrenB仅记录1或0。
为什么只记录ChildrenA和ChildrenB的第一个发现记录?
如果将
(2个答案)
6年前关闭。
我正在使用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
子句之后:
.Where(x => x.Id == parentAId).FirstOrDefault()...
09-07 00:40