考虑以下NHibernate映射,并注意注释的属性。这些列与key
中指定的index
和map
列相同。当我删除注释(因此包括属性的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>
我在代码中需要的是Dictinonary<TypeOfpart, ActiveUnitPart>
。但我遇到的问题是,UnitId
中的TypeOfPart
实例中未设置属性ActiveUnitPart
和Dictinonary<TypeOfpart, ActiveUnitPart>
的值。
是的,加载了本单元的相关部分列表,是的,字典中的键与右侧部分相关。但我不明白为什么我不能引用TypeOfPart
和UnitId
来填充ActiveUnitPart
本身的属性。
我该如何解决或解决这个问题?
为什么我需要这个的动机:
我必须能够使用ActiveUnitPart
而无需引用相关的Unit
(UnitId
)
编辑1:
我知道我可以截取Parts
的{{1}}属性的setter并迭代Unit
来设置代码中的值,但它看起来像Dictinonary<TypeOfpart, ActiveUnitPart>
而我如果可能的话,我希望学会更优雅的hack
方法来完成它。
答案 0 :(得分:3)
可以将映射从column
更改为formula
。如何实现这一目标的最佳方式是:
<property name="TypeOfPart" formula="TypeOfPart" insert="false" update="false" />
<property name="UnitId" formula="UnitId" insert="false" update="false" />