creo que las entidades deben aplicar la igualdad en comparación clave principal por defecto, pero la documentación nhibernate recomienda el uso de identidad de la empresa:nhibernate: ¿cuáles son las mejores prácticas para implementar la igualdad?
La manera más obvia es implementar equals()/GetHashCode() comparando el valor del identificador de ambos objetos. Si el valor es el mismo, ambos deben ser la misma fila de la base de datos, por lo tanto, son iguales (si ambos se agregan a un ISet, solo tendremos un elemento en el ISet). Desafortunadamente, no podemos usar ese enfoque. ¡NHibernate solo asignará valores de identificador a los objetos que son persistentes, una instancia recién creada no tendrá ningún valor de identificador! Recomendamos implementar Equals() y GetHashCode() usando Business Key Equity. significa
negocios igualdad clave que los Iguales() método compara sólo las propiedades que forman la clave de negocio, una clave que podría identificar nuestra instancia en el mundo real (una clave candidato natural)
Y el ejemplo (también de la 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;
}
Esto hizo que mi cabeza dando vueltas porque la noción de identidad de la empresa (de acuerdo con el ejemplo) es la misma que la comparación por la sintaxis, que es básicamente el tipo de semántica asocio con ValueObjects . El motivo por el que no se utilizan las claves primarias de la base de datos como valores de comparación es porque cambiará el código hash del objeto si la clave primaria no se genera en el lado del cliente (por ejemplo, incremental) y utiliza algún tipo de colección hashtable (como ISet) para almacenar tus entidades
¿Cómo puedo crear una buena implementación de igualdad que no rompa las reglas generales de igualdad/código hash (http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx) y se ajuste a las reglas de nhibernate también?
¿Por qué (específicamente) quiere/necesita utilizar Equals? – apollodude217