NHibernate "Repeated column in mapping for collection" 异常



请考虑以下NHibernate映射,并注意注释的属性。这些列与map中指定的keyindex列相同。当我删除注释(因此包括属性的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>.但我遇到的问题是属性UnitIdTypeOfPart的值没有在Dictinonary<TypeOfpart, ActiveUnitPart>ActiveUnitPart实例中设置。

是的,加载

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

我该如何解决或解决此问题?

我为什么需要这个的动机:我必须能够在不引用相关Unit的情况下使用 ActiveUnitPart ( UnitId (

编辑 1:我知道我可以拦截UnitParts 属性的 setter 并循环访问Dictinonary<TypeOfpart, ActiveUnitPart>以在代码中设置值,但这似乎是一个hack,如果可能的话,我希望学习一种更优雅NHibernate的方式来完成它。

可以,只需将映射从 column 更改为 formula 即可。实现这一目标的最佳方法是:

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

最新更新