比较两个实体框架实体的最佳方法是什么?

comparison entity-framework

我想知道比较两个相同类型实体的最有效方法。

一个实体是手工创建的xml文件(即新实例和手动设置属性),另一个实体是从我的对象上下文中重新创建的。

我想知道每个实例中的属性值是否相同。

我的第一个想法是从每个对象生成属性值的哈希并比较哈希,但可能有另一种方式,或内置方式?

欢迎大家提出意见。

非常感谢,

詹姆士

UPDATE

我想出了这个:

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
    }



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因