2010-11-26 3 views
1

Ich habe Entitätsobjekte, die mit einer Datenbank synchronisiert sind. Ich verwende diese Entitäten häufig in drei verschiedenen Vergleichen:Wie soll ich eine Methode aufrufen, die prüft, ob zwei Entitäten auf dieselbe Datenbankeinheit verweisen?

  1. Überprüfen Sie, ob zwei Entitätsobjekte das gleiche CLR-Objekt sind.
  2. Überprüfen Sie, ob alle Eigenschaften von zwei Entitätsobjekten gleich sind.
  3. Überprüfen Sie, ob zwei Entitätsobjekte auf dieselbe Datenbankentität verweisen, auch wenn sich einige Eigenschaften unterscheiden.

Für 1 verwende ich Object.ReferenceEquals(). Für 2 überschreibe ich Equals() alle Eigenschaften zu überprüfen. Für 3 war ich ein bisschen inkonsequent. Einige Entitäten haben eine "Match" -Methode, manche haben eine "IsSame" -Methode. Die Logik der Methode vergleicht ihren Primärschlüssel und wenn noch nicht von der Datenbank zugewiesen wurde, ihren Sekundärschlüssel (falls sie einen haben).

Viele Codeszenarien wären einfacher, wenn ich Equals zum Vergleichen von Schlüsseln verwende (zB könnte ich eine Liste einfach mit Contains() überprüfen), aber ich würde es verwirrend finden, wenn Equals nur die Schlüssel vergleicht und nicht Überprüfen Sie alle Eigenschaften.

Mein Szenario ist ein N-Tier-System mit Self-Tracking-Entitäten. Ich muss oft eine Liste von Entitäten oder Ähnlichem mit einer aktualisierten Entität aktualisieren, die von einer anderen Ebene kommt.

Gibt es einen Konsens für die Benennung einer Methode, die prüft, ob sich zwei Entitäten auf dieselbe logische Entität beziehen? Schlüsselgleichungen()? SameEntity()?

Antwort

2

DbEquivalent()?

+1

+1 - Ich stimme definitiv zu, dass es klar sein muss, dass dies ein DB-Vergleich ist. –

+0

Nicht schlecht, aber vielleicht ein wenig zu konkret, was auf ihre Persistenz in einer Datenbank hinweist. Was die Entitäten teilen, sind ihre Schlüssel, sie beziehen sich auf die gleiche "physische" Sache, aber in einer Datenbank gespeichert zu sein ist "zufälliger". – Holstebroe

+0

@Holstebroe: Nun, in meinem Fall, wenn ich eine ID verwende, liegt das daran, dass ich etwas mit dem Datenspeicher machen möchte. Ich stimme nicht zu, dass zwei Entitäten mit der gleichen ID die gleiche "physische" Sache sind, die IDs betreffen die Datenspeicherebene. – UpTheCreek

Verwandte Themen