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는 매우 기초적 일 것이고 특별한 일이 없기 때문에 나는 그것을 포함시키지 않았다.
내가 가진 쿼리는 내가 뭔가를 1 개 또는 0 상위 기록을 찾을 수
일어날 것으로 예상 무엇
base.unitOfWork.Session.Query<ParentA>()
.Where(x => x.Id == parentAId)
.FetchMany(x => x.ChildrenA)
.ThenFetchMany(x => x.ChildrenB)
.FirstOrDefault();
입니다. 하나의 레코드를 찾으면 열심히 모든 ChildrenA를로드 한 다음 모든 ChildrenB를로드합니다.
일어나고 그것은 1 개 또는 0 상위 기록을 찾아 무엇
. 그런 다음 ChildrenA 및 ChildrenB에 대해 1 또는 0 레코드 만 사용합니다.
왜 ChildrenA와 ChildrenB에 대해 처음으로 발견 된 기록 만 가져 가고 있습니까?
FirstToDefault()
에서 .toList()
으로 변경하면 예상 한 모든 결과를 얻지 만 그 부모 레코드가있는 레코드가 하나 뿐이므로 무의미한 것으로 나타납니다.
FirstOrDefault를 Where,하지만 FetchMany 명령문 앞에 두어 본 적이 있습니까? –
@AaronHawkins - 나중에 할 수 없습니다. 그렇게하면 가져 오기를 사용할 수 없습니다. – chobo2