2011-05-04 24 views
1

我有以下情況我被卡住了。 我有一個名爲ContactAssociation的實體,其中包含屬性客戶端和聯繫人。 我必須獲得滿足某些條件的客戶端的所有聯繫人。 條件是: 每個客戶都有屬性BusinessEntities,它是BusinessEntity的集合,每個BusinessEntity都有一個BusinessLevel。 這是代碼,我肯定會做出這樣更容易理解:製作nhibernate做一個多對多的關係

link.Session.QueryOver<ContactAssociation>(() => ca) 
             //.Fetch(asoc => asoc.Client) 
             .JoinAlias(() => ca.Client,()=> client) 

.Left.JoinQueryOver<BuEntry>(() => client.BuEntries,() => be) 
             .Where(() => client.ID == clientKey) 
             .Where(() => be.BuLevel.LevelNo > buLevel); 

行,所以我寫了這樣的事,我不斷收到錯誤,物業BuLevel.LevelNo無法找到 但它的存在在模型中

我試過了標準,但是我看到了相同的錯誤,只是它在NHProfiler而不是Visual Studio中,並且在Visual Studio中出現了一個更加神祕的錯誤。 無論如何... 我最終解決了SQL查詢的問題,但我應該如何編寫QueryOver和/或Criteria以獲得正確的結果?

謝謝您提前

P.S.

這裏是我的SQL查詢:

careTeamMembers = link.Session.CreateSQLQuery(@"select c.* from ContactAssociation ca 
           inner join Contact c 
           on ca.contactkey = c.contactkey 
           left join ContactBu cb 
           on cb.contactkey = c.contactkey 
           left join BuEntry be 
           on cb.entrykey = be.entrykey 
           left join BuLevel bl 
           on be.levelkey = bl.levelkey 
           where ca.clientkey = :clientkey 
           and bl.levelno > :level") 
      .AddEntity(typeof(Contact)) 
      .SetInt32("clientkey", clientKey) 
      .SetInt32("level", buLevel) 
      .SetMaxResults(1000) 
      .List<Contact>(); 
+1

什麼是您的SQL查詢看起來像一個加入?這可能有助於我們弄清楚最終的結果是什麼。 – csano 2011-05-04 20:04:27

+1

是BusinessLevel還是一個實體? – Vadim 2011-05-04 21:29:10

+0

@Vadim是業務水平是一個實體 – Para 2011-05-05 05:51:56

回答

0

你缺少BULevel

link.Session.QueryOver<ContactAssociation>(() => ca) 
             //.Fetch(asoc => asoc.Client) 
             .JoinAlias(() => ca.Client,()=> client) 

.Left.JoinQueryOver<BuEntry>(() => client.BuEntries,() => be) 
             .Where(() => client.ID == clientKey) 
             .JoinQueryOver<BuLevel>(() => be.BuLevel) 
             .Where(bu => bu.LevelNo > buLevel); 
+0

我得到這個錯誤:'System.ArgumentException:值「SL.STAdmin.DAL.ContactAssociation」的類型是不是「SL.STAdmin.DAL .Contact「,不能用在這個泛型集合中。」這是我寫的代碼:'ContactAssociation ca = null; 聯繫客戶端= null; BuEntry be = null; careTeamMembers = link.Session.QueryOver (()=> CA).JoinAlias(()=> ca.Client,()=>客戶端).Left.JoinQueryOver (()=> client.BuEntries,( )(> => be).Where(()=> client.ID == clientKey).JoinQueryOver (()=> be.BuLevel).Where(bu => bu.LevelNo> buLevel).Take(1000).List ();' – Para 2011-05-18 07:03:08

+0

@Para,您的查詢是針對ContactAssociations的,但您希望它返回聯繫人。它將無法做到這一點。您可以添加投影以檢索關聯的聯繫人,從聯繫人末端創建標準或返回ContactAssociations列表。 – Vadim 2011-05-18 15:41:57

+0

我該如何做到這一點? – Para 2011-05-30 08:09:04

相關問題