이 같은 데이터 모델이 손 속성. 그냥 null을 제공합니다. 중첩 된 객체를 채우는 방법 (둘 이상의 레벨 깊이 포함)은 누구에게도 도움이 될 수 있습니다. 쿼리 대신 프로젝션을 사용하면 나에게 더 좋습니다. 참고 : 영사를 사용하지 않고 데이터를로드하면 제대로 작동하므로 매핑에서 문제가되지 않습니다.어떻게 중첩하려면 개체가
답변
가능한 솔루션
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();
하지만 그게 나 그룹에 의해 DB에서 데이터를 가져온 후 이루어집니다 - 그래서 그것은 데이터베이스하지만 응용 프로그램에 의해 수행되지 않는 것 같습니다. 내가 맞습니까? 그룹화 할 때 집계 및 그룹화 된 열만 선택할 수 있기 때문에 – Jarda
예. 그룹화 할 때 손 데이터를 잃어 버리게됩니다. 모든 데이터를 선택하고 클라이언트 쪽을 변환해야합니다. 그 외에도 다음과 같이 두 단계로 가져올 수 있습니다. 1 그룹화 된 사람을 가져오고 하나는 손을 가져옵니다. – Firo
그건 내가 두려워했던 것입니다. 하지만 나를 위해 그룹화 된 사람을 먼저 가져온 다음 중첩 된 개체를 채우는 것이 좋습니다. 도움을 주셔서 대단히 감사합니다. – Jarda
시도는 ID로 그룹을 수행하고 한 번에 모든 손을 반환하는 SQL 생각합니다. IMO 그렇게는 불가능합니다. 개체를로드 완료 – Firo