2011-12-14 36 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