nHibernate:在多个到多个映射中使用一个表

时间:2014-06-20 10:12:33

标签: c# nhibernate nhibernate-mapping

我的SellDepartment的一切正常。我可以保存并获取PriceLines但是当我尝试将数据保存到SellEmployee表格时,我得到了外键约束错误:

  

INSERT语句与FOREIGN KEY约束冲突   “FK9B5C4AB8B12F319A”

我知道我可以通过创建SellBpartment和SellEmployee继承的SellBase类来解决这个问题,但我真的不喜欢在数据库中有一个额外的表格。

所以我的问题是,我可以通过使用映射文件来解决这个问题吗?如果是的话,我做错了什么?

我有一个表格,其中包含不同其他表格的行:

**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>

1 个答案:

答案 0 :(得分:0)

您的数据库设计似乎不对,我可以从表/映射文件中注意到的问题是,

Priceline.SellId可以是SellEmployeeId或SellDepartmentId,根据我在这里的信息,我认为这些是主键。

因此,您对Priceline有两个限制,包括SellEmployee和SellDepartment,当您向Priceline插入一行时,约束期望在SellEmployee和SellDepartment中都有一个相关记录,而事实并非如此。这就是它失败的原因。