我想在NHibernate中为实体集合使用Iesi.Collections HashedSet类。我想要的功能是无法添加重复的实体。我希望实体在共享Id(即主键)字段时被视为重复,或者,如果它们具有Id == 0(即未保存),则会比较某些键属性。
我注意到默认情况下,HashedSet似乎使用引用相等性来定义重复项。为了让HashedSet根据我上面描述的规则定义重复,我需要更改什么? (例如,覆盖.Equals,覆盖==等)。
答案 0 :(得分:1)
必须始终重写Equals和GetHashCode。 documentation for GetHashCode州:
覆盖GetHashCode的派生类还必须重写Equals以保证两个被认为相等的对象具有相同的哈希码;否则,Hashtable类型可能无法正常工作。
Jon Skeet对this question的回答提供了更多信息。
覆盖相等运算符是可选的,但我推荐它。
答案 1 :(得分:0)
您需要覆盖GetHashCode方法。