Я думаю, что субъекты должны осуществлять равенство по первичному ключу сравнения, по умолчанию, но документация NHibernate рекомендует использовать бизнес-идентичность:nhibernate: каковы наилучшие методы реализации равенства?
Наиболее очевидный способ заключается в реализации Equals()/GetHashCode(), сравнивая значение идентификатора обоих объектов. Если значение одно и то же, оба должны быть одной и той же строкой базы данных, поэтому они равны (если оба они добавлены в ISet, у нас будет только один элемент в ISet). К сожалению, мы не можем использовать этот подход. NHibernate будет присваивать значения идентификатора постоянным объектам, новый экземпляр не будет иметь никакого значения идентификатора! Мы рекомендуем использовать Equals() и GetHashCode(), используя равенство Business Key.
Бизнес ключ равенство означает, что Equals() метод сравнивает только те свойства, которые формируют ключ бизнеса, ключ, который будет определять наш экземпляр в реальном мире (естественный ключ кандидата)
И пример (также из дока):
public override bool Equals(object other)
{
if (this == other) return true;
Cat cat = other as Cat;
if (cat == null) return false; // null or not a cat
if (Name != cat.Name) return false;
if (!Birthday.Equals(cat.Birthday)) return false;
return true;
}
Это заставила меня закружилась голова, потому что понятие деловой идентичности (по примеру) такой же, как сравнение по синтаксису, который является в основном типом семантиками я связываю с ValueObjects , Причина, по которой не использовать первичные ключи базы данных в качестве значений сравнения, заключается в том, что это изменит хэш-код объекта, если первичный ключ не создается на стороне клиента (для ex incremental), и вы используете какую-то коллекцию хэш-таблиц (например, ISet) для хранения ваших объектов.
Как создать хорошую реализацию равенства, которая не нарушает общие правила для равенства/hashcode (http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx) и также соответствует правилам nhibernate?
Почему вы (в частности) хотите/должны использовать равные? – apollodude217