2009-07-07 7 views
6

Quiero saber la forma más eficiente de comparar dos entidades del mismo tipo.¿Cuál es la mejor forma de comparar dos entidades marco de entidad?

Una entidad se crea a partir de un archivo xml a mano (es decir, nueva instancia y propiedades de configuración manual) y la otra se retiró del contexto de mi objeto.

Quiero saber si los valores de las propiedades son los mismos en cada caso.

Lo primero que quiero hacer es generar un hash de los valores de las propiedades de cada objeto y comparar los hashes, pero podría haber otra forma, o una forma integrada.

Cualquier sugerencia sería bienvenida.

Muchas gracias,

James

ACTUALIZACIÓN

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; 
     } 
    } 
} 

no he probado todavía, es más de un alimento para el pensamiento para generar algunas ideas más del grupo.

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

Respuesta

5

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 
    } 
+0

Así que, básicamente, sólo tiene que utilizar una serie de sentencias if para comprobar la igualdad en cada propiedad y el uso de la conveniencia de anular método .equals de la entidad para llevar a cabo el comparar? – James

+0

Sí, creo. Si me he vuelto demasiado simple para lo que buscas, ¿por qué no publicar un código más :) –

+0

Ok, gracias, cuando tengo algo implementado mal publique mi solución – James

Cuestiones relacionadas