2つのエンティティフレームワークエンティティを比較するための最良の方法は何ですか?

comparison entity-framework

質問

同じ種類の2つのエンティティを比較する最も効率的な方法を知りたいです。

一方のエンティティは手動で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;
        }
    }
}

私はまだそれをテストしていません、それはグループからいくつかのより多くのアイデアを生成するための思考のためのより食品です。

問題になる可能性があることの1つは、エンティティ値自体を持つプロパティを比較することです。デフォルトのコンパレータがオブジェクト参照を比較すると、それは決して真になりません。考えられる解決策は、エンティティIDを比較するように、私のエンティティの等価演算子をオーバーロードすることです。

人気のある回答

オブジェクトのEqualsメソッドをオーバーライドして、それを等しくするプロパティを比較する実装を作成します。

    public override bool Equals(object obj)
    {
        return MyProperty == ((MyObject)obj).MyProperty
    }


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ