¿Cuál es la mejor manera de comparar dos entidades marco de entidad?

comparison entity-framework

Pregunta

Quiero saber la forma más eficiente de comparar dos entidades del mismo tipo.

Una entidad se crea a partir de un archivo xml a mano (es decir, una nueva instancia y establece manualmente las propiedades) y la otra se vuelve a revisar desde el contexto de mi objeto.

Quiero saber si los valores de propiedad son los mismos en cada instancia.

Mis primeros pensamientos son generar un hash de los valores de propiedad de cada objeto y comparar los hashes, pero ¿puede haber otra forma o una forma integrada?

Cualquier sugerencia será bienvenida.

Muchas gracias,

James

ACTUALIZAR

Se me ocurrió esto:

static class ObjectComparator<T>
{
    static bool CompareProperties(T newObject, T oldObject)
    {
        if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length)
        {
            return false;
        }
        else
        {
            var oldProperties = oldObject.GetType().GetProperties();

            foreach (PropertyInfo newProperty in newObject.GetType().GetProperties())
            {
                try
                {
                    PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name);

                    if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null))
                    {
                        return false;
                    }
                }
                catch
                {
                    return false;
                }
            }

            return true;
        }
    }
}

Todavía no lo he probado, es más un pensamiento para generar algunas ideas más del grupo.

Una cosa que podría ser un problema es comparar las propiedades que tienen valores de entidad, si el comparador predeterminado se compara con la referencia del objeto, entonces nunca será cierto. Una posible solución es sobrecargar el operador de igualdad en mis entidades para que se compare en el ID de entidad.

Respuesta popular

Reemplace el método Equals de su objeto y escriba una implementación que compare las propiedades que lo hacen igual.

    public override bool Equals(object obj)
    {
        return MyProperty == ((MyObject)obj).MyProperty
    }


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow