Quelle est la meilleure façon de comparer deux entités-cadre d'entité?

comparison entity-framework

Question

Je veux connaître le moyen le plus efficace de comparer deux entités du même type.

Une entité est créée manuellement à partir d’un fichier xml (c’est-à-dire une nouvelle instance et des propriétés définies manuellement) et l’autre est extraite de mon contexte d’objet.

Je veux savoir si les valeurs de propriété sont les mêmes dans chaque cas.

Ma première idée est de générer un hachage des valeurs de propriété de chaque objet et de comparer les hachages, mais il pourrait y avoir un autre moyen, ou un moyen intégré?

Toute suggestion serait la bienvenue.

Merci beaucoup,

James

METTRE À JOUR

Je suis venu avec ceci:

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

Je ne l’ai pas encore testé, c’est plus une matière à réflexion pour générer plus d’idées du groupe.

Un problème qui pourrait poser problème est la comparaison de propriétés ayant des valeurs d’entité. Si le comparateur par défaut se compare à la référence d’objet, il ne sera jamais vrai. Une solution possible consiste à surcharger l'opérateur d'égalité sur mes entités afin qu'il se compare à l'ID d'entité.

Réponse populaire

Remplacez la méthode Equals de votre objet et écrivez une implémentation comparant les propriétés qui le rendent égal.

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow