2012-04-24 58 views
1

我試圖把這個SQL語句轉換成一個功能NHibernate映射:
SQL翻譯成連貫NHibernate =>與靜態值加盟

select * 
from Project p 
inner join ProjectData pd on p.Project = pd.Project 
inner join ProjectCompany pc on p.Project = pc.Project and pc.InitComp = 'Yes' and pc.Company = pd.LogComp 
inner join ProjectCustomer cust on cust.id = pd.custid 

我面臨着一些問題獲得此聲明成單一實體(所有聯合是一對一的關係)。
我知道一個視圖可以解決我的問題,但唉,我沒有創建一個權限。

目前我的代碼看起來像這樣

Table("Project"); 
Id(p=> p.Number); 
Join("ProjectData", j => 
{ 
    j.Fetch.Join(); 
    j.KeyColumn("Project"); 
    j.Map(pd => pd.Customer); 
}); 
Map(p => p.Complexity); 

我面臨的問題是:

  • 如何創建一個硬編碼的過濾器(pc.InitComp = '是')
  • 我如何加入2條語句(p.project = pc.Project和pc.Company = pd.LogComp
  • 我該如何從連接表而不是基礎連接?(ProjectCustome r加入ProjectData)

很多的問題,在sql中的東西很平凡,但我似乎無法在互聯網上找到一個簡單的答案,然後創建一個視圖。

+1

nhibernate不支持連接映射中的過濾器。一種解決方案是使用對類ProjectData的私有引用,並在客戶的getter/setter中實現邏輯 – Firo 2012-04-26 10:42:03

+0

這是一個無賴,我想這樣做的主要原因是創建一個快速查詢,以便與自定義getter/setter一起工作沒有給我需要的好處。謝謝你指出這一點,但我猜我必須請求dba讓我創建一個視圖。 – Kristof 2012-04-26 11:16:29

+1

a''幾乎與'' – Firo 2012-04-26 12:33:16

回答

0

我結束了一個原始的sql查詢並使用datareader來手動填充我的對象。
這工作原因,我只需要從表中讀取,而不是寫。