データベースと同期されたエンティティオブジェクトがあります。私はよくこれらのエンティティを3つの異なる比較で使用します:2つのエンティティが同じdbエンティティを参照しているかどうかをチェックするメソッドを呼び出す必要はありますか?
- 2つのエンティティオブジェクトが同じCLRオブジェクトであるかどうかを確認します。
- 2つのエンティティオブジェクトのすべてのプロパティが等しいかどうかを確認します。
- プロパティが異なる場合でも、2つのエンティティオブジェクトが同じデータベースエンティティを参照しているかどうかを確認します。
私はObject.ReferenceEquals()を使用します。 2の場合、すべてのプロパティをチェックしてEquals()を上書きします。 私は少し矛盾しています。一部のエンティティには、「一致」メソッドがあり、一部には「IsSame」メソッドがあります。メソッドのロジックは、プライマリキーと、まだデータベースによって割り当てられていない場合は、セカンダリキー(存在する場合)を比較します。
Equalsを使用してキーを比較すると、多くのコードシナリオが簡単になります(たとえば、Contains()を使用してリストをチェックするなど)がありますが、Equalsはキーを比較してすべてのプロパティを確認してください。
私のシナリオは、自己追跡エンティティを持つN層システムです。私はしばしば、エンティティのリストや他の層から到着した更新されたエンティティを更新する必要があります。
2つのエンティティが同じ論理エンティティを参照しているかどうかをチェックする方法を指定するコンセンサスがありますか? KeyEquals()? SameEntity()?
+1 - 私はこれがDB比較であることが明確である必要があることは間違いありません。 –
データベースでの永続性を参照してもあまり意味がありません。エンティティが共有するものはキーであり、同じ「物理的」なものを指しますが、データベースに格納されることは「偶然」です。 – Holstebroe
@Holstebroe:私の場合は、IDを使用するたびに、データストアで何かをしようとしているからです。同じIdを持つ2つのエンティティが同じ「物理的」なものであることに同意しません.IDはデータストアレベルの関心事です。 – UpTheCreek