NHibernate“映射集合中的重复列”异常

时间:2013-10-01 07:15:18

标签: exception nhibernate dictionary mapping

考虑以下NHibernate映射,并注意注释的属性。这些列与key中指定的indexmap列相同。当我删除注释(因此包括属性的TypeOfPartUnitId列)时,我会在映射集合中获得"重复列"异常。

<map name="Parts" table="ActiveUnitParts" lazy="false">
  <key column="UnitId" />
  <index column="TypeOfPart" type="integer"/>
  <composite-element class="ActiveUnitPart">
    <property name="Id" />
    <property name="CreationDate" />
    <property name="PartInfo"/>
    <property name="Remarks"/>
    <!-- <property name="TypeOfPart" /> -->
    <!-- <property name="UnitId" /> -->
  </composite-element>
</map>

我在代码中需要的是Dictinonary<TypeOfpart, ActiveUnitPart>。但我遇到的问题是,UnitId中的TypeOfPart实例中未设置属性ActiveUnitPartDictinonary<TypeOfpart, ActiveUnitPart>的值。

是的,加载了本单元的相关部分列表,是的,字典中的键与右侧部分相关。但我不明白为什么我不能引用TypeOfPartUnitId来填充ActiveUnitPart本身的属性。

我该如何解决或解决这个问题?

为什么我需要这个的动机: 我必须能够使用ActiveUnitPart而无需引用相关的UnitUnitId

编辑1: 我知道我可以截取Parts的{​​{1}}属性的setter并迭代Unit来设置代码中的值,但它看起来像Dictinonary<TypeOfpart, ActiveUnitPart>而我如果可能的话,我希望学会更优雅的hack方法来完成它。

1 个答案:

答案 0 :(得分:3)

可以将映射从column更改为formula。如何实现这一目标的最佳方式是:

<property name="TypeOfPart" formula="TypeOfPart" insert="false" update="false" />
<property name="UnitId" formula="UnitId" insert="false" update="false" />