Qual é a melhor maneira de comparar duas entidades de estrutura de entidade?
Eu quero saber a maneira mais eficiente de comparar duas entidades do mesmo tipo.
Uma entidade é criada a partir de um arquivo xml manualmente (isto é, nova instância e propriedades definidas manualmente) e a outra é retivada do contexto do meu objeto.
Eu quero saber se os valores da propriedade são os mesmos em cada instância.
Meu primeiro pensamento é gerar um hash dos valores de propriedade de cada objeto e comparar os hashes, mas pode haver outro caminho, ou um caminho embutido?
Qualquer sugestão seria bem vinda.
Muito Obrigado,
James
ATUALIZAR
Eu vim com isso:
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;
}
}
}
Eu não testei ainda, é mais um alimento para pensar para gerar mais algumas idéias do grupo.
Uma coisa que pode ser um problema é comparar as propriedades que possuem valores de entidade, se o comparador padrão comparar na referência de objeto, então nunca será verdadeiro. Uma possível correção é sobrecarregar o operador de igualdade em minhas entidades para que seja comparado com o ID da entidade.