2010-01-05 67 views
1

我有我想要映射到會看起來像一個類中的兩個表:功能NHibernate - 地圖2表一類

CUSTOMER_INFO_CLASS.cs 
---------------------- 
Id (CUSTOMER table) 
CustomerName (CUSTOMER table) 
CustomerTypeDesc (CUSTOMER_TYPE table) 

我試圖做它的加入,如下:

Table("CUSTOMER"); 

Id(x => x.ID).Length(10).Column("CustomerId"); 
Map(x => x.CustomerName); 

Join("CUSTOMER_TYPE", m => 
    { 
    m.Optional(); 
    m.Map(x => x.CustomerTypeDesc); 
    m.KeyColumn("CustomerType"); 
    }); 

問題是,我試圖鏈接兩個表的字段不是其中任何一個主鍵。 (默認情況下,通過定義爲ID的字段完成的連接) 所以我發現對於CUSTOMER_TYPE表,我可以通過「KeyColumn」定義字段。
如何定義CUSTOMER表中的相關列將是CustomerTypeCode而不是CustomerId? (如果我可以的話)

在結束時,SQL查詢應該是這樣的:

Select Id, CustomerName, CustomerAddress, CustomerTypeDesc 
From CUSTOMER t1 
    Left join CUSTOMER_TYPE t2 
    On t1.CustomerTypeCode = t2.CustomerType 

回答

0

如果Customer表映射CustomerType成員到CustomerType表的主鍵,然後休眠應該做的爲你自動加入。

是否有一個原因爲什麼CustomerType沒有通過正常的外鍵引用鏈接?

+0

CustomerTypeCode不是CUSTOMER的主鍵,而CustomerType不是CUSTOMER_TYPE的主鍵,由此我們的問題就開始了。 我不知道爲什麼CustomerType沒有被正常的外鍵鏈接,數據庫是在一段時間之前建立的。它不是一個選項改變它,因爲另一個系統使用它... – Olga 2010-01-06 12:08:03

+0

我注意到的另一件事是,當使用連接,fluint做這樣的連接:JOIN領域,定義爲從第一個表中的ID =字段,我定義第二張表中的「KeyColumn」。但我不想使用ID列加入,我想從第一個表的其他列,我怎麼能告訴它nhibernate ... – Olga 2010-01-06 12:16:02