NHibernate在多对多和复合元素中重复插入

时间:2013-10-14 06:51:11

标签: tsql nhibernate

我在NHibernate 2应用程序中有一个Product实体,它与Location有多对多的关系。 Location实体没有任何导航属性或映射回产品。它映射如下:

<bag name="Locations" table="ProductLocation" cascade="none">
  <key column="ProductId" />
  <many-to-many column="LocationId" class="Location"/>
</bag>

该产品还有一个复合元素,一个具有通过ProductComponent类映射的浓度的Component。该类没有导航属性或映射回产品。

<bag name="ProductComponents" table="ProductComponent" access="nosetter.camelcase">
  <key column="ProductId" />
  <composite-element class="ProductComponent">
    <property name="Concentration"/>
    <many-to-one name="Component" column="ComponentId" access="nosetter.camelcase"/>
  </composite-element>
</bag>

一次插入一个产品时,一切正常。但是,批量插入多个产品时会失败。

虽然产品本身插入正常,但每个产品都有自己唯一的ID,多对多(位置)和复合元素(ProductComponent)中的元素不能很好地插入。这是因为NHibernate多次使用相同的ProductId执行对ProductLocation表的插入。

这会在链接表中导致重复记录。如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

您必须将关系的一个站点定义为所有者,以便只有一方执行插入。这可以通过另一方将Inverse设置为true来实现。

Find a more detailed explanation here