2

考虑以下 NHibernate 映射,并注意注释属性。key这些列与 中指定的和index列相同map。当我删除评论(因此包括属性的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没有ActiveUnitPartDictinonary<TypeOfpart, ActiveUnitPart>.

是的,这个单元的相关部分列表已加载,是的,字典中的键与正确的部分相关。但我不明白为什么我不能引用TypeOfPartandUnitId来填充属性ActiveUnitPart本身。

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

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

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

4

1 回答 1

3

有可能,只需将映射从 更改columnformula。如何实现这一目标的最佳方法是:

<property name="TypeOfPart" formula="TypeOfPart" insert="false" update="false" />
<property name="UnitId" formula="UnitId" insert="false" update="false" />
于 2013-10-01T08:12:05.723 回答