Как присоединиться с помощью NHibernate QueryOver - PullRequest
3 голосов
/ 27 марта 2012

У меня в коде следующая ситуация, и я не могу ее решить. Ситуация -

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

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

Вопрос - Есть ли способ объединить grpA и grpB с использованием синтаксиса QueryOver? Можно ли сделать это без использования List () на grpA или grpB, потому что каждая из них будет содержать около 10 000 записей, и я не хочу помещать их в память. Это правильное использование QueryOver? Есть ли более чистые способы достижения того, что я пытаюсь решить?

Возможно, это основное сомнение, но я новичок в NHib и QueryOver.

Редактировать -

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

Это то, что я пытаюсь сделать в SQL.

1 Ответ

8 голосов
/ 28 марта 2012

Самый простой способ сделать это:

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();

"Fetch" получает "EmployeeGroup" и связанный с ним "EmployeeGroupRelation" (не прокси)

...