Wie sollten wir Equals und GetHashCode für NHibernate-Entitäten implementieren?

9

Es gibt viele Fragen und Antworten und Artikel zu dieser Frage, aber meiner Meinung nach scheint es keine wirklich klare / richtige Antwort zu geben.

Für mich hat Ayende die beste generische Implementierung, die ich bisher gesehen habe: Ссылка

.... Aber es ist von 2007 ....

Ist dies der 'beste Weg', diese Methoden speziell im Hinblick auf NHibernate 3.2 zu implementieren, die einige Unterschiede in der Proxy-Implementierung zu früheren Versionen enthält?

    
Tom Carter 29.06.2012, 13:31
quelle

2 Antworten

5

Ja!

Sie sollten Equals und GetHashCode außer Kraft setzen. Aber, sollte nicht Gleichheit machen ( Name == other.Name && Age == other.Age ), Sie sollten Identitätsgleichheit machen!

Wenn Sie dies nicht tun, werden Sie wahrscheinlich einen Proxy einer Entity mit der realen Entity vergleichen und es wird miserable sein, zu debuggen. Zum Beispiel:

%Vor%

Hier ist eine Beispiel-Basisklasse, wenn Sie int als Ihre Id verwenden (die auch abstrahiert werden könnte nach beliebiger Identitätstyp ):

%Vor%     
TheCloudlessSky 21.11.2013 00:45
quelle
2

Meine persönliche Empfehlung ist es nicht, diese Methoden überhaupt zu implementieren, da dies das Laden in vielen Fällen erzwingt, in denen es nicht wirklich notwendig ist.

Auch wenn Sie Entitäten nicht über mehrere Sitzungen hinweg verschieben, brauchen Sie das nie. Und selbst wenn Sie das tun, können Sie bei Bedarf immer nach Id vergleichen.

    
Diego Mijelshon 29.06.2012 23:01
quelle