Wie lassen sich zwei Entity Framework Entities am besten vergleichen?

comparison entity-framework

Frage

Ich möchte die effizienteste Methode zum Vergleich zweier Entitäten desselben Typs kennen.

Eine Entität wird von Hand aus einer XML-Datei erstellt (dh neue Instanz und manuell gesetzte Eigenschaften), und die andere Entität wird aus meinem Objektkontext übernommen.

Ich möchte wissen, ob die Eigenschaftswerte in jeder Instanz gleich sind.

Meine ersten Gedanken sind, einen Hash der Eigenschaftswerte von jedem Objekt zu generieren und die Hashes zu vergleichen, aber es könnte einen anderen Weg geben oder einen eingebauten Weg?

Anregungen wären willkommen.

Danke vielmals,

James

AKTUALISIEREN

Ich kam dazu:

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

Ich habe es noch nicht getestet, es ist eher ein Denkanstoß, um weitere Ideen aus der Gruppe zu generieren.

Ein Problem, das möglicherweise ein Problem darstellt, ist das Vergleichen von Eigenschaften, die selbst über Entitätswerte verfügen. Wenn der Standardvergleicher die Objektreferenz vergleicht, ist er niemals wahr. Eine mögliche Lösung besteht darin, den Gleichheitsoperator meiner Entitäten zu überladen, damit er die Entitäts-ID vergleicht.

Beliebte Antwort

Überschreiben Sie die Equals-Methode Ihres Objekts, und schreiben Sie eine Implementierung, die die Eigenschaften vergleicht, durch die das Objekt gleich ist.

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow