NHibernate中的实体要求在HashedSet中使用

时间:2010-10-14 11:48:12

标签: nhibernate equality hashset

我想在NHibernate中为实体集合使用Iesi.Collections HashedSet类。我想要的功能是无法添加重复的实体。我希望实体在共享Id(即主键)字段时被视为重复,或者,如果它们具有Id == 0(即未保存),则会比较某些键属性。

我注意到默认情况下,HashedSet似乎使用引用相等性来定义重复项。为了让HashedSet根据我上面描述的规则定义重复,我需要更改什么? (例如,覆盖.Equals,覆盖==等)。

2 个答案:

答案 0 :(得分:1)

必须始终重写Equals和GetHashCode。 documentation for GetHashCode州:

  

覆盖GetHashCode的派生类还必须重写Equals以保证两个被认为相等的对象具有相同的哈希码;否则,Hashtable类型可能无法正常工作。

Jon Skeet对this question的回答提供了更多信息。

覆盖相等运算符是可选的,但我推荐它。

答案 1 :(得分:0)

您需要覆盖GetHashCode方法。