NHibernate 작은 데이터 계층 구조를로드하려고하면 문제가있어. 내 도메인 모델은 다음과 같습니다.NHibernate 자식 및 하위 자식 컬렉션을 로딩 열심히
class GrandParent
{
int ID{get;set;}
IList<Parent> Parents {get; set;}
}
class Parent
{
IList<Child> Children {get; set;}
}
class Child
{
}
및 주어진 GrandParent에 대한 모든 부모와 자녀를 열렬히로드하고 싶습니다. 이 linq-to-NH 쿼리는 올바른 SQL을 생성하고 예상대로 GrandParent를로드합니다. (예에서는 조부모에 각각 2 개의 하위 개체가있는 2 명의 부모가 있으므로 총 4 개의 하위 개체가 있다고 가정합니다.
var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c =>
c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
where g.ID == 1
select g).ToList();
Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!
grandparent.Parents 컬렉션에는 2 개의 중복 항목이 포함되어 있습니다. DistinctRootEntityResultTransformer는 1 레벨 깊이의 콜렉션에서만 작동하므로, 각 부모가 가진 얼마나 많은 Child 객체에 따라 Parents 콜렉션이 복제됩니다.
NH가 고유 한 부모 개체 만 포함하도록 할 수 있습니까?
대단히 감사합니다.
이 문제를 해결할 수 있었습니까? 정말 짜증나. –
예 - IList for ICollection을 변경하고 매핑에서 'set'을 사용하는 것에 대한 아래 내 의견을 참조하십시오. – Simon