2011-12-14 67 views
1

我有这样的表结构:我们怎样才能取一个以上的孙子藏品

 ReferralSource - main table 
     -Phone - join table Rs as one-to-one 
     - Carrier - child table for Phone 
     - Type - child table for Phone 

我想Linq查询得到它:

Session.Query<ReferralSource>()     
      .Fetch(x => x.Phone) 
      .ThenFetch(x => x.Type) 
      .Fetch(x => x.Phone) 
      .ThenFetch(x => x.Carrier); 

而这个查询得到这个SQL代码:

select referralso0_.Id,       
       referralso0_.FirstName,     
       phonetype4_.TypeName 
       carrier6_.Name     
     from REFERRALSOURCES referralso0_     
       left outer join PHONES phone3_ 
       on referralso0_.PhoneId = phone3_.Id 
       left outer join PHONETYPES phonetype4_ 
       on phone3_.TypeId = phonetype4_.Id 
      - duplicated join started 
      left outer join PHONES phone5_ 
      on referralso0_.PhoneId = phone5_.Id 
      left outer join CARRIERS carrier6_ 
      on phone5_.CarrierId = carrier6_.Id - duplicated join finished 

如何使用fetch删除重复的左连接?

回答

1

也许如果你映射Phone作为一个组件,而不是一个实体

public ReferralSourceMap() 
{ 
    Join("Phones", join => 
    { 
     join.KeyColumn("..."); 
     join.Component(x => x.Phone, c => { ... }); 
    }); 
} 

编辑:不幸的是,这将不会LINQ2NHibernate只能用标准和QueryOver工作。我应该删除答案吗?

+0

我认为这可能对其他人有用。 – 2012-01-11 15:19:35