Wie lassen sich zwei Entity-Framework-Entitäten am besten vergleichen?
Ich möchte wissen, wie zwei Entitäten desselben Typs am effizientesten verglichen werden können.
Eine Entität wird von Hand aus einer XML-Datei erstellt (dh neue Instanz und manuell festgelegte Eigenschaften) und die andere wird aus meinem Objektkontext entfernt.
Ich möchte wissen, ob die Eigenschaftswerte in jedem Fall gleich sind.
Meine ersten Gedanken sind, aus jedem Objekt einen Hash der Eigenschaftswerte zu generieren und die Hashes zu vergleichen, aber es könnte einen anderen oder einen eingebauten Weg geben?
Anregungen wären willkommen.
Danke vielmals,
James
AKTUALISIEREN
Das habe ich mir ausgedacht:
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.
Eine Sache, die ein Problem sein könnte, ist das Vergleichen von Eigenschaften, die selbst Entitätswerte haben. Wenn der Standardkomparator nach Objektreferenz vergleicht, ist dies niemals der Fall. Ein möglicher Fix besteht darin, den Gleichheitsoperator für meine Entitäten zu überladen, damit er mit der Entitäts-ID verglichen wird.