1

이 같은 데이터 모델이 손 속성. 그냥 null을 제공합니다. 중첩 된 객체를 채우는 방법 (둘 이상의 레벨 깊이 포함)은 누구에게도 도움이 될 수 있습니다. 쿼리 대신 프로젝션을 사용하면 나에게 더 좋습니다. 참고 : 영사를 사용하지 않고 데이터를로드하면 제대로 작동하므로 매핑에서 문제가되지 않습니다.어떻게 중첩하려면 개체가

+0

시도는 ID로 그룹을 수행하고 한 번에 모든 손을 반환하는 SQL 생각합니다. IMO 그렇게는 불가능합니다. 개체를로드 완료 – Firo

답변

1

가능한 솔루션

var query = databaseSession.CreateCriteria(typeof(Person)) 
    .JoinAlias("hands", "hand") 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.Property("Id")) 
     .Add(Projections.Property("Name")) 
     .Add(Projections.Property("hand.Id")) 
     .Add(Projections.Property("hand.Foo"))) 
    .List<object[]>() 
    .GroupBy(arr => (int)arr[0]) 
    .Select(g => new PersonDTO 
    { 
     Id = g.Key, 
     Name = g.First().Name, 
     Hands = g.Select(arr => new Hand { Id = arr[2], Foo = arr[3] }).ToList(), 
    }); 

var results = query.ToList(); 
+0

하지만 그게 나 그룹에 의해 DB에서 데이터를 가져온 후 이루어집니다 - 그래서 그것은 데이터베이스하지만 응용 프로그램에 의해 수행되지 않는 것 같습니다. 내가 맞습니까? 그룹화 할 때 집계 및 그룹화 된 열만 선택할 수 있기 때문에 – Jarda

+0

예. 그룹화 할 때 손 데이터를 잃어 버리게됩니다. 모든 데이터를 선택하고 클라이언트 쪽을 변환해야합니다. 그 외에도 다음과 같이 두 단계로 가져올 수 있습니다. 1 그룹화 된 사람을 가져오고 하나는 손을 가져옵니다. – Firo

+0

그건 내가 두려워했던 것입니다. 하지만 나를 위해 그룹화 된 사람을 먼저 가져온 다음 중첩 된 개체를 채우는 것이 좋습니다. 도움을 주셔서 대단히 감사합니다. – Jarda