Nhibernate查询和OrderBy会在同一个表上导致多个联接

Nhibernate查询和OrderBy会在同一个表上导致多个联接,nhibernate,sql-order-by,outer-join,Nhibernate,Sql Order By,Outer Join,模型中的两个核心实体是: 帐目 登记 以下是帐户和注册之间的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

模型中的两个核心实体是:

  • 帐目
  • 登记
以下是帐户和注册之间的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
 }
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_
查询:

查询:

(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();
问题:多个左外与注册表连接

  • 投影的一个连接
  • 一个连接用于Where条件
  • OrderBy条件的两个联接(每个OrderBy一个)

在注册时有没有办法消除这些多重连接

请使用{}进行代码格式化,以便您的问题可读…@Cristian Boanu:
{}
按钮并不是此处格式化代码的唯一方法。选择并按住Ctrl+K或四空格缩进也可以。我知道了,你找到答案了吗?
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_