2009-04-29 100 views
3

我試圖用NHibernate和SQL服務器實現類繼承hieararchy。我使用每個層次結構策略(映射文件中的一個表和幾個子類元素)可以很好地工作。NHibernate加入子類

但是因爲我想提出一些約束的子類表每個子類策略表(N + 1個表和一個映射文件N連接子類元素)更有意義,在我的情況。我與我應該把什麼樣的PK/FK協會對大師表(人)和子類表(ContactPersons)掙扎。根據NHibernate文檔,這些表之間應該有一個主鍵關聯。我試圖將FK約束從子類PK放到主類PK中,但它仍然不起作用。我收到以下例外情況:

NHibernate.Exceptions.GenericADOException:無法插入:[Jobflow.Models.Entities.ContactPerson] [SQL:INSERT INTO ContactPersons(Email,Company,PersonID)VALUES(?,?,?) ] ---> System.Data.SqlClient.SqlException:當IDENTITY_INSERT設置爲OFF表「ContactPersons」無法插入的標識列的顯式值。

我曾嘗試將IDENTITY爲ON,但似乎並沒有幫助...

回答

4

您需要在人員爲INT身份申報之列,但在ContactPersons剛剛INT - 只有一個表的需求跟蹤身份價值。你的外鍵/主鍵很好,這是你需要解決的唯一問題。

NHibernate的將插入的人,使用SCOPE_IDENTITY()獲取新的標識值,然後使用該值明確用於插入到ContactPersons。

0

我創建與NH的SchemaExport工具的架構。它創建子類主鍵的外鍵:

alter table ContactPersons 
add constraint FK81E543E94B3FF9C3 
foreign key (Persons_FK) 
references Persons 

Persons_FK在映射文件中聲明

<joined-subclass name="ContactPersons"> 
    <key column="Persons_FK"/> 
    ...