2009-07-07 13 views
6

同じタイプの2つのエンティティを比較する最も効率的な方法を知りたいと思います。2つのエンティティフレームワークエンティティを比較する最良の方法は何ですか?

1つのエンティティは、手動でXMLファイルから作成されます(新しいインスタンスと手動で設定されたプロパティ)。もう1つは、自分のオブジェクトコンテキストからretviedされます。

それぞれのインスタンスでプロパティ値が同じかどうかを知りたいです。

私の最初の考えは、各オブジェクトからプロパティ値のハッシュを生成し、ハッシュを比較することですが、別の方法、または組み込みの方法がありますか?

どのようなご提案も歓迎いたします。

多くのおかげで、

ジェームズ

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; 
     } 
    } 
} 

、それは思考のための食糧の詳細ですグループからさらに多くのアイデアを生み出す。

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

答えて

5

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

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

文が各プロパティに平等をチェックして、比較を行うために、エンティティにオーバーライド.Equals方法の利便性を使用するのであれば基本的には一連のでしょうか? – James

+0

ええ、私は思います。私があなたの後に何かのためにあまりにも単純な方法を行っている場合は、いくつかのコードを投稿してください:) –

+0

私は何か悪い実装私のソリューション – James