请考虑以下NHibernate映射,并注意注释的属性。这些列与map
中指定的key
和index
列相同。当我删除注释(因此包括属性的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
的值没有在Dictinonary<TypeOfpart, ActiveUnitPart>
的ActiveUnitPart
实例中设置。
了本机的相关部分列表,是的,字典中的键与右侧部分相关。但我不明白为什么我不能参考TypeOfPart
和UnitId
来填充ActiveUnitPart
本身的属性。
我该如何解决或解决此问题?
我为什么需要这个的动机:我必须能够在不引用相关Unit
的情况下使用 ActiveUnitPart
( UnitId
(
编辑 1:我知道我可以拦截Unit
的 Parts
属性的 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" />