C# nHibernate:在多个多对一映射中使用一个选项卡
我的销售部一切正常。我可以保存并获取价格线,但当我尝试将数据保存到SellEmployee选项卡时,出现外键约束错误: INSERT语句与外键约束冲突 “FK9B5C4AB8B12F319A” 我知道我可以通过创建一个SellDepartment和SellEmployee继承的SellBase类来解决这个问题,但我真的不希望数据库中有一个额外的选项卡 我的问题是,我能用映射文件解决这个问题吗?如果是,我做错了什么 我有一个包含不同其他选项卡行的选项卡:C# nHibernate:在多个多对一映射中使用一个选项卡,c#,nhibernate,nhibernate-mapping,C#,Nhibernate,Nhibernate Mapping,我的销售部一切正常。我可以保存并获取价格线,但当我尝试将数据保存到SellEmployee选项卡时,出现外键约束错误: INSERT语句与外键约束冲突 “FK9B5C4AB8B12F319A” 我知道我可以通过创建一个SellDepartment和SellEmployee继承的SellBase类来解决这个问题,但我真的不希望数据库中有一个额外的选项卡 我的问题是,我能用映射文件解决这个问题吗?如果是,我做错了什么 我有一个包含不同其他选项卡行的选项卡: **PriceLines 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>
您的数据库设计似乎不正确,我从表/映射文件中注意到的问题是 Priceline.SellId可以是SellEmployeeId或SellDepartmentId,根据我这里的信息,我假设这些是主键 因此,您对SellEmployee和SellDepartment的Priceline有两个约束,当您向Priceline插入一行时,这些约束预期在SellEmployee和SellDepartment中都有一个相关记录,但事实并非如此。这就是它失败的原因 请注意:也许这只是我和我的问题,但你上面的简化定义并不清楚。虽然我想帮忙,但我不知道这是怎么回事。。。