Nhibernate Query и OrderBy вызывают множественное объединение для одних и тех же таблиц - PullRequest
4 голосов
/ 16 апреля 2011

Два основных объекта в модели:

  • Счет
  • Регистрация

Вот отображение fluentNH между учетной записью и регистрацией:

.Override<Account>(m =>
 {
   m.References(x =>
     x.Registration).Cascade.All().Not.Nullable().Unique(); 
     // unidirectional one-to-one association, unique will not allow multiple nulls
 }

У нас есть запрос, чтобы найти 10 лучших (accountid, registrationid), которые соответствуют определенным критериям фильтра (выражение на счете) и являются заказано два поля на регистрацию

Пример:

 public class AccountRegistrationId
{
  public Guid AccountId { get; set; }
  public Guid RegistrationId { get; set; }
}

ЗАПРОС:

Запрос:

(from r in _session.Query<Account>() select r)
.OrderBy(a => a.Registration.PatientVisit)
.OrderBy(a => a.Registration.AccountNumber)
.Where(a=>a.Registration.Mrn == "Mrn 1234")
.Select(a =>  new AccountRegistrationId{     AccountId = a.Id,
                                                                RegistrationId = a.Registration.Id
                                                          }
).ToArray();

полученный sql имеет 4 внешних соединения между аккаунтом и Регистрация:

select   TOP ( 10 /* @p0 */ ) account0_.Id    as col_0_0_,
                     registrati3_.Id as col_1_0_
from     [Account] account0_
         left outer join [Registration] registrati1_
           on account0_.Registration_id = registrati1_.Id
         left outer join [Registration] registrati2_
           on account0_.Registration_id = registrati2_.Id
         left outer join [Registration] registrati3_
           on account0_.Registration_id = registrati3_.Id,
         [Registration] registrati4_

Проблема: множественное левое внешнее соединение с таблицей регистрации

  • Одно соединение для проекции
  • Одно объединение для критериев Где
  • Два объединения для критериев OrderBy (по одному на каждый заказ по)

Есть ли способ избавиться от этих множественных объединений при регистрации?

...