Nhibernate Query和OrderBy导致同一个表上的多个连接

时间:2011-04-15 22:39:16

标签: 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
 }

我们有一个查询来查找前十名(accountid,registrationid) 匹配某个筛选条件(帐户中的表达式)并且是 按注册的两个字段排序

示例:

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

THE QUERY:

查询:

(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_

问题:多个左外连接注册表

  • 投影的一个联接
  • Where Criteria的一次加入
  • OrderBy条件的两个连接(每个订单一个)

有没有在注册时摆脱这些多连接?

0 个答案:

没有答案