2009-06-15 63 views
0
映射覆雜引用

我試圖建立在NHibernate的下列協會(基實體類包含id屬性,它和屬性是選自S#ARP架構)NHibernate的

public class Terminal : Entity { 
    public virtual string Name { get; set; } 
} 
public class Order : Entity { 
    [NotNull] 
    public virtual Terminal Terminal { get; set; } 
} 

哪裏上的數據訂單存儲在存儲在TERMINALS表中的ORDERS和終端數據上。問題在於兩個表格之間沒有直接聯繫。如果我有一個ORDERS.ORDER_ID的ID,我會用下面的SQL獲取相應的TERMINALS行。

select t.* 
from ORDERS o 
    inner join cust_prod cp on (o.CUST_PROD_ID = cp.CUST_PROD_ID) 
    inner join customer_terminal ct on (cp.CUSTOMER_TERMINAL_ID = ct.CUSTOMER_TERMINAL_ID) 
    inner join terminal t on (ct.TERMINAL_ID = t.TERMINAL_ID) 
where o.ORDER_ID = :p_order_id 

如何在NHibernate中映射這個?最好如何在Fluent NHibernate中映射這個,但我想我可以從XML中找出它。另外,鑑於我正在使用的遺留數據庫充滿了這樣的鏈條,是否有任何最佳實踐建議?

+0

什麼是客戶和訂單類? – Paco 2009-06-15 21:49:17

回答

1

我敢肯定,你的選擇將是:

1)對原始的SQL地圖(看看在SQL查詢NHibernate的文檔定義:nh docs)..上映射的更新部分/插入是正確的後。

2)或者,至少介紹中間的實體來處理cust_prod和customer_terminal中的關係。如果這些表使用組合鍵作爲PK,那麼你會想看看如何映射組合鍵和鍵對多。

在第二個選項中,您可以在連接實體上映射一對一(或雙向多對一)。

3)我沒有看過永久存儲過程,但我相信NH 2.0+引入了更好的sproc支持。這可能是一個可行的第三選擇。