Каков наилучший способ сравнить две сущности каркаса сущностей?
Я хочу узнать наиболее эффективный способ сравнения двух объектов одного типа.
Одна сущность создается из XML-файла вручную (т. Е. Новый экземпляр и свойства, заданные вручную), а другая извлекается из контекста моего объекта.
Я хочу знать, одинаковы ли значения свойств в каждом случае.
Мои первые мысли состоят в том, чтобы сгенерировать хэш значений свойств для каждого объекта и сравнить хэши, но может быть другой или встроенный способ?
Любые предложения приветствуются.
Большое спасибо
Джейм
ОБНОВИТ
Я придумал это:
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;
}
}
}
Я еще не проверял, это скорее пища для размышлений, чтобы генерировать еще несколько идей из группы.
Одной из проблем, с которой можно столкнуться, является сравнение свойств, которые сами имеют значения сущностей. Если компаратор по умолчанию сравнивает ссылку на объект, это никогда не будет истинным. Возможное решение - перегрузить оператор равенства в моих сущностях, чтобы он сравнивался по идентификатору сущности.