Требования к сущностям в NHibernate для использования в HashedSet - PullRequest
0 голосов
/ 14 октября 2010

Я хотел бы использовать класс Iesi.Collections HashedSet для коллекций сущностей в NHibernate.Я хочу, чтобы дублирующиеся объекты не могли быть добавлены.Я хотел бы, чтобы объекты считались дублирующими, если они имеют общее поле Id (т.е. первичный ключ) или, если они имеют Id == 0 (т.е. несохраненный), то сравниваются определенные свойства ключа.что по умолчанию HashedSet, по-видимому, определяет дубликаты, используя равенство ссылок.Что мне нужно изменить, чтобы HashedSet определял дублирование в соответствии с правилами, описанными выше?(Например, переопределить .Equals, переопределить == и т. Д.).

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Equals и GetHashCode всегда должны быть переопределены вместе. Документация для GetHashCode гласит:

Производные классы, которые переопределяют GetHashCode, также должны переопределять Equals, чтобы гарантировать, что два объекта, считающихся равными, имеют одинаковый хэш-код; в противном случае тип Hashtable может работать некорректно.

Ответ Джона Скита на на этот вопрос предоставляет дополнительную информацию.

Переопределение операторов равенства необязательно, но я рекомендую это.

0 голосов
/ 14 октября 2010

Вам необходимо переопределить метод GetHashCode.

...