Exception NHibernate“;“集合映射中的重复列”;例外

Exception NHibernate“;“集合映射中的重复列”;例外,exception,nhibernate,dictionary,mapping,Exception,Nhibernate,Dictionary,Mapping,考虑以下NHibernate映射,并注意注释的属性。这些列与映射中指定的键和索引列相同。当我删除注释(因此包括属性的TypeOfPart和UnitId列)时,我得到了“集合映射中的重复列”异常 <map name="Parts" table="ActiveUnitParts" lazy="false"> <key column="UnitId" /> <index column="TypeOfPart" type="integer"/> <c

考虑以下NHibernate映射,并注意注释的属性。这些列与
映射中指定的
索引
列相同。当我删除注释(因此包括属性的
TypeOfPart
UnitId
列)时,我得到了“集合映射中的重复列”异常

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

我在代码中需要的是一个
字典
。但是我遇到的问题是,
UnitId
TypeOfPart
的属性值没有在
ActiveUnitPart
实例中设置在
dictionary

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

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

我为什么需要这个的动机: 我必须能够使用
ActiveUnitPart
s,而无需参考相关的
Unit
UnitId

编辑1:
我知道我可以截取
单元
部分属性的setter,并迭代
字典
来设置代码中的值,但这似乎是一种
黑客行为
,如果可能的话,我希望学习一种更优雅的
NHibernate
方法,只需将映射从
更改为
公式
。实现这一目标的最佳途径是:

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