2010-06-16 119 views
0

我有一個獨特的情況與遺留應用程序,我有一個基於兩個整數值的父/子關係。不幸的是,這些字段是而不是 id和parentId或類似的東西。這些列是ItemId和SubItemId。當這兩列彼此相等時,該項目被假定爲父項。當它們不同時,ItemId引用Items父項,而SubItemId只是它的子項的標識符。NHibernate的奇怪關係映射問題

下面是一個例子 項目Id = 1,SubItemId = 1:父件 項目Id = 1,SubItemId = 6:子項,其父是Item其中ID字段是(1,1) 項目Id = 2 ,SubItemId = 2:父件 項目Id = 2,SubItemId = 9:子項,其父是Item其中ID字段是(2,2)

與此信息

所以,我一個類層次結構設置像這樣:

public class Item 
    public property ItemId as Integer 
    public property SubItemId as Integer 
end class 

class ParentItem : Item 
end class 

class SubItem : Item 
    public property ParentItem as ParentItem 
end class 

所以我想映射SubItem cl的ParentItem屬性屁股到相應的ParentItem使用NHibernate和我不能爲我的生活弄清楚如何。我能夠讓NHibernate基於公式鑑別器實例化正確的類,並且我希望類似的東西可以用於多對一的關係。

我無法更改表格結構,這當然限制了我的選擇。另外,我爲我的映射使用FluentNHibernate,所以隨意使用它的語法提供建議。

謝謝!

更新 我創建的補充,等同於一個外鍵指向父,現在我得到一個NHibernate的映射錯誤兩個新列視圖:

Foreign key (FK163E572EF90BD69A:ItemsNHibernateView [ParentItemID, ParentrSubitemID])) must have same number of columns as the referenced primary key (ItemsNHibernateView [ItemID, SubitemID]) 

這是扔我送行因爲對我來說,它看起來像兩個鍵具有相同的列數...

+0

我知道你說你不能改變表結構,但是你能夠在數據庫端創建一個視圖來處理數據,然後它到達NHibernate? – 2010-06-16 22:09:01

+0

我不認爲創建視圖會是一個問題。 目前,我們已經有了用於創建和編輯這些項目的其他機制。我們只是希望將我們的物品表映射爲支持其他物品的需求,並作爲邁向更美好未來的第一步! ;) – Andorbal 2010-06-17 13:40:05

回答

1

好吧,我想出了基於本霍夫斯坦的評論。正如我在原始問題的更新中提到的那樣,我創建了視圖。錯誤是由一個令人毛骨悚然的愚蠢錯誤造成的。當我創建數組列出列名的外鍵,我把兩個名字在引號像這樣的:

new string() {"ParentItemID, ParentSubitemID"} 

代替:

new string() {"ParentItemID", "ParentSubitemID"} 

的方式,NHibernate的是顯示錯誤把我從香味中扔出去了。