2009-04-21 71 views
2

我有映射表A列的一類,它主要是映射到表B.下面的屬性問題映射一個屬性解釋這更好:功能NHibernate從另一個表

有一個類CustomerRisk,它具有Risk和CustomerNumber屬性。

在數據庫中,它由兩個表組成:Customer(客戶)和CustomerRisk(CustomerRisk),CustomerRisk具有Customer的外鍵,Risk(風險)的一個。

映射風險並不難,但映射CustomerNumber是問題。有沒有可能做到這一點,而不創建一個客戶類*?所以NHibernate加入Customer類以選擇CustomerNumber:

select cn.CustomerNumber, r.Description 
from CustomerRisk cr 
    inner join Customer c on c.CustomerID = cr.CustomerID 
    inner join Risk r on r.RiskID = cr.RiskID 

多個CustomerRisk記錄當然可以有相同的CustomerID。

希望這有點清楚,非常感謝。

  • 我知道你通常需要一個客戶類,但我已經'匿名'類。
+0

我們通過爲Customer表創建一個類,但隱藏了CustomerRisk中的Customer屬性(內部,所以Fluent NH仍然可以通過AssemblyInfo中的InternalsVisibleTo訪問它)來解決它。 CustomerRisk.CustomerNumber屬性然後僅返回其內部Customer屬性的CustomerNumber屬性。 – Peter 2009-04-21 14:42:54

回答

0

在使用NHibernate時要牢記的一件事是它處理實體並且只知道你已經告訴它(通過映射文件)。 HQL是SQL的面向對象版本,因此您不能使用它來訪問不屬於映射域模型一部分的字段。

雖然您仍然可以通過NHibernate會話執行普通的舊SQL,但這實際上是訪問尚未映射到ORM中的數據的唯一方式。可能有一個輕量級映射解決方案(儘管我不能說沒有看到你的數據模型),但如果你反對完全映射「客戶」,我認爲SQL是你最好的選擇。

+0

我們改變了它,所以現在我們映射我們的Customer對象。 – Peter 2009-04-23 17:23:49