2009-11-25 56 views
0

嗨,我有一個遺留DB到Person對象被映射其中,具有家庭成員的集合,例如:映射自表中的一個到許多使用非PK clolumns

class Person 
    { 
     ... 
     string Id; /* 9-digits string */ 
     IList<Person> Family; 
     ... 
    } 

PERSON表格如下:

Id: CHAR(9), PK 
FamilyId: INT, NOT NULL 

和其他幾個不相關的列。 我試圖使用FamilyId列映射Family集合到PERSON表,這不是上面提到的PK。 所以,我實際上有一個一對多的自我表參照。

我得到一個錯誤說「演員是無效的」,當我的映射是這樣的:

... 
<set name="Family" table="Person" lazy="false"> 
    <key column="FamilyId" /> 
    <one-to-many class="Person" /> 
</set> 
... 

,因爲很明顯,加入NHibernate的是想說明的是在PK柱之間,Id和'Secondary'列FamilyId,而不是將FamilyId列加入自己。

有什麼想法嗎?

+0

您是否試過使用Bag而不是Set或將屬性從IList更改爲ISet? – zoidbeck 2009-11-25 21:24:12

+0

是的,嘗試過 - 但仍然拋出相同的錯誤。 – 2009-11-27 02:05:11

回答

0

我可能沒有把握你在這裏工作的數據,但在我看來,你的數據模型是不完整的。我期望你有一個家庭實體以及一個人實體,這樣每個人都有一個他們所屬的家庭財產,並且家庭實體有一個屬於這個家庭的人物對象列表。

我想這裏缺少的是關於您試圖映射的數據庫模式的足夠信息。 FamilyId的價值是什麼?它們是否引用了其他一些表(即Family Key表)?

+0

嘿,好像我錯過了一些細節,所以表PERSON看起來像這樣: [ID] - PK,char(9) [FirstName],char(25)not-null [LastName],char(25)not -null [FamilyId],int not-null 每個PERSON記錄都必須具有相應的兄弟記錄,即具有相同FamilyId但具有不同ID的行當然。如果你願意的話,可以實現多對多的自引用。 好像定義一個Family對象可以提供幫助,如果你能指定你認爲它的映射應該如何,我會很高興。 謝謝。 – 2009-11-27 01:55:41

0

最好把:

[ID] - PK, char(9) 
[FirstName], char(25) not-null 
[LastName], char(25) not-null 
[FamilyId], int not-null 

其實,家庭關係,可以用使用FAMILYID和PERSONID一個鏈接表結合家庭成員的建模。但我現在無法創建它,因爲它是現有的生產系統。 目前,我必須以某種方式模擬家庭系列。除了BryanD提供的解決方案,這看起來相當不錯,有人可以提供一種使用FamilyId列連接表的方法,而不是PK?

相關問題