Два основных объекта в модели:
Вот отображение 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 (по одному на каждый заказ по)
Есть ли способ избавиться от этих множественных объединений при регистрации?