2014-06-20 56 views
0

一切工作正常我的SellDepartment。我可以保存並得到PriceLines但我得到一個外鍵約束錯誤,當我嘗試將數據保存到我的SellEmployee TABEL:nHibernate:在多對多映射中使用一個tabel

INSERT語句衝突與外鍵約束 「FK9B5C4AB8B12F319A」

我知道我可以通過SellBase類來解決這個問題,SellDepartment和SellEmployee然後繼承,但我真的不喜歡在數據庫中有一個額外的tabel。

所以我的問題是,我可以通過使用映射文件解決這個問題嗎?如果是的話,我做錯了什麼?

我有一個包含不同的其他tabels線TABEL:

**PriceLines tabel** 
PriceLineId 
Price 
Type 
SellId 

**SellDepartment tabel** 
SellDepartmentId 
Reason 
DepartmentId 

**SellEmployee tabel** 
SellEmployeeId 
Reason 
EmployeeId 

爲PriceLines我NHibernate的映射文件中有這麼多到一的映射:

<subclass name="Source1Line" discriminator-value="DepartmentLine" extends="PriceLines"> 
    <many-to-one name="Source1" column="SourceId" class="Source1" /> 
</subclass> 

<subclass name="Source2Line" discriminator-value="EmployeeLine" extends="PriceLines"> 
    <many-to-one name="Source2" column="SourceId" class="Source2" /> 
</subclass> 

和映射文件爲我SellDepartment和SellEmployee:

<set name="PriceLines" cascade="all-delete-orphan" inverse="true"> 
    <key column="SellId"/> 
    <one-to-many class="DepartmentLine"/> 
</set> 

<set name="PriceLines" cascade="all-delete-orphan" inverse="true"> 
    <key column="SellId"/> 
    <one-to-many class="EmployeeLine"/> 
</set> 
+0

*請注意:也許這只是我和我的問題,但上面的簡化定義尚不清楚。雖然我想幫助,但不知道這是怎麼回事...... * –

回答

0

你的數據庫設計看起來不對,t他的問題我可以從表/映射文件注意到,

Priceline.SellId可以是SellEmployeeId或SellDepartmentId,並從我在這裏的信息,我假設這些是主鍵。

因此,您對於SellEmployee和SellDepartment有兩個與Priceline的約束,並且當您向Priceline插入一行時,約束期望在SellEmployee和SellDepartment中都有相關記錄,但情況並非如此。這是它失敗的原因。