比較兩個實體框架實體的最佳方法是什麼?

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合法嗎? 是的,了解原因