2012-03-27 3 views
3

나는 다음과 같은 상황에 직면 해 있으며 그것을 풀 수 없다. 상황 -NHibernate QueryOver를 사용하여 참여하는 방법

var grpA = Session.QueryOver(() => _employeeGroupRelation)); 
var grpB = Session.QueryOver(() => _employeeGroup)); 

// var grpC should join grpA and grpB on _employeeGroupRelation.groupID = _employeeGroup.ID 

질문 - 가 QueryOver 구문을 사용하여 grpA 및 grpB에 가입 할 수있는 방법이 있습니까? grpA 또는 grpB에서 List()를 사용하지 않고이 작업을 수행 할 수 있습니까? 왜냐하면 각각의 레코드가 10,000 개에 달하고 메모리에 덤프하고 싶지 않기 때문입니다. 이것이 QueryOver를 올바르게 사용하고 있습니까? 내가 해결하고자하는 것을 달성하기위한 더 깨끗한 방법이 있습니까?

아마도 기본적인 의문이지만 NHib와 QueryOver의 초보자입니다.

편집 -

select * from employeeGroup a 
inner join employeeGroupRelation b on a.ID = b.ID 

이 내가 SQL에서 할 노력하고있어 것입니다.

+0

SQL에서 성취하려는 것을 묻는 것이 더 도움이 될 수 있습니다. 위의 방법으로 무엇을하려고하는지 잘 모르겠습니다. –

답변

8

가장 쉬운 방법은 그것을 할 수 있습니다 :

session.QueryOver<EmployeeGroup>() 
    .JoinQueryOver(employeeGroup => employeeGroup.EmployeeGroupRelation) 
    .Take(1000) // The same as top in SQL, if you don't want load all of entities 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List(); 

"JoinQueryOver"얻는다 "EmployeeGroup은"프록시로 "EmployeeGroupRelation"관련에 LazyLoad

원하지 않는 경우를 위해 (매핑에서 따라 다름) LazyLoad를 사용하여이 작업을 수행 할 수 있습니다

session.QueryOver<EmployeeGroup>() 
    .Fetch(employeeGroup => employeeGroup.EmployeeGroupRelation).Eager 
    .Take(1000) // The same as top in SQL, if you don't want load all of entities 
    .TransformUsing(Transformers.DistinctRootEntity) 
    .List(); 

"가져 오기" "EmployeeGroup"및 관련 "EmployeeGroupRelation"(안 프록시)를 얻을 수

+0

직원 그룹이란 무엇입니까 ?? 별칭을 만들지 않았으므로이 오류가 발생합니다. – Baz1nga

+0

O 죄송합니다. 수정했습니다. – Anton

관련 문제