myślę, że podmioty powinny wdrożyć równości poprzez klucz podstawowy porównania jako domyślne, ale dokumentacja NHibernate zaleca stosowanie tożsamość działalności:nhibernate: jakie są najlepsze praktyki w zakresie wdrażania równości?
Najbardziej oczywistym sposobem jest wdrożenie equals()/GetHashCode() poprzez porównanie wartości identyfikatora obu obiektów. Jeśli wartość jest taka sama, oba muszą być tymi samymi wierszami bazy danych, dlatego są równe (jeśli oba zostaną dodane do ISet, będziemy mieli tylko jeden element w ISet). Niestety nie możemy użyć tego podejścia. NHibernate przydzieli tylko wartości identyfikatorów obiektom, które są trwałe, nowo utworzona instancja nie będzie miała żadnej wartości identyfikatora! Zalecamy stosowanie metod Equals() i GetHashCode() przy użyciu równości klucza biznesowego.
działalności równość klucz oznacza, że equals() metoda porównuje tylko te właściwości, które stanowią klucz biznesowe, klucz, który będzie identyfikować nasze wystąpienie w realnym świecie (naturalny klucz potencjalny)
i przykład (również z doc):
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;
}
Ten dostał moja głowa wiruje, ponieważ pojęcie tożsamości gospodarczej (zgodnie z przykładem) jest taka sama jak porównanie za pomocą składni, która jest w zasadzie taki rodzaj semantyki kojarzy mi się z ValueObjects . Powodem nieużywania kluczy podstawowych bazy danych jako wartości porównawczych jest to, że spowoduje to zmianę kodu skrótu obiektu, jeśli klucz podstawowy nie zostanie wygenerowany po stronie klienta (na przykład przyrostowo) i użyjesz pewnego rodzaju zbioru haseł (takiego jak ISet) do przechowywania twoich bytów.
Jak mogę stworzyć dobrą realizację równości, które nie łamie ogólne zasady równości/hashcode (http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx) i zgodny z NHibernate zasad, jak również?
Dlaczego (konkretnie) chcesz/potrzebujesz używać równań? – apollodude217