控制NHibernate复合元素的唯一性

时间:2010-11-27 18:50:19

标签: nhibernate-mapping

我有以下映射:

...
<set name="Tests" table="InstrumentTests">
   <key column="InstrumentId" />
   <composite-element class="InstrumentTest">
      <property name="TestInstrumentId" not-null="true" />
      <property name="OtherTestId" />
   </composite-element>
</set>

我想使InstrumentId和TestInstrumentId唯一,因此表InstrumentTest不能包含:

InstrumentId TestInstrumentId OtherTestId
 1             TEST1            ABC
 1             TEST1            BCD  <--- NO
 2             TEST1            ABC  <--- OK, different InstrumentId

也许我想要的是使用复合元素是不可能的,但是我应该如何映射它。

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。我需要为InstrumentTest类实现Equals和GetHashCode。

在nHiberntate文档中明确说明:

  

注意:如果定义复合元素的ISet,则正确实现Equals()和GetHashCode()非常重要。