我想知道比较相同类型的两个实体的最有效方法。
一个实体是手动从 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;
}
}
}
我还没有测试过,它更像是一种思考的食物,可以从小组中产生更多的想法。
可能有问题的一件事是比较本身具有实体值的属性,如果默认比较器比较对象引用,那么它永远不会为真。一个可能的解决方法是在我的实体上重载相等运算符,以便它在实体 ID 上进行比较。
最佳答案
覆盖对象的 Equals 方法并编写一个实现来比较使其相等的属性。
public override bool Equals(object obj)
{
return MyProperty == ((MyObject)obj).MyProperty
}
关于entity-framework - 比较两个 Entity Framework 实体的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092534/