Entity Framework CTP 5 - Repository-Muster - Aktualisierungen vornehmen

8

Wie würden Sie einen Update-Vorgang mit CTP 5 unter Verwendung von DbContext und unter Verwendung des Repository-Musters durchführen? Früher mit EF 4.0 konnte es wie folgt gemacht werden.

%Vor%

Gibt es einen Grund, warum EF keine einfache Möglichkeit bietet, "getrennte" Entitäten zu aktualisieren? Ich möchte die Datenbank nicht abfragen und alle Eigenschaften auf das Objekt kopieren, das von der Abfrage zurückgegeben wird. Mit anderen Worten, EF sollte eine update-Methode haben, die die Entity übernimmt (ähnlich der Add-Methode). Wenn der Entitätsschlüssel bereits in der Datenbank vorhanden ist, aktualisieren Sie die Entität mit den aktuellen Werten. Warum sollten wir "Attach" machen und dann alle Eigenschaften in das angehängte Objekt kopieren. Mir scheint es überflüssig zu sein, alle Eigenschaften von Entitäten zu kopieren, nur um zu aktualisieren, wenn das Objekt "disconnected" bereits existiert.

    
Jonna 28.01.2011, 01:27
quelle

1 Antwort

8

Ich glaube, Sie können immer noch dieselbe Methode wie in Ihrem Codebeispiel ausführen, um eine nicht verbundene Entität mit dem CTP5 DbContext zu aktualisieren:

%Vor%

Wenn man sich das generierte SQL anschaut, erstellt dies natürlich eine vollständige Update-Anweisung für alle Eigenschaften des Kundenobjekts einschließlich der Eigenschaften, die sich nicht tatsächlich geändert haben, da EF nicht weiß, was der aktuelle Status in der Datenbank ist. Wenn Sie das vermeiden wollen, gibt es keinen anderen Weg, als den aktuellen Zustand in der Datenbank vor dem Update zu holen, was auf diese Weise möglich wäre:

%Vor%

(Angenommen, Sie haben einen Schlüssel ID auf Ihrem Kundenobjekt "item".)

Dies erstellt eine SQL-Update-Anweisung, die nur die Eigenschaften enthält, die sich tatsächlich gegenüber dem Status in der Datenbank geändert haben. Ich bin mir nicht sicher, ob der zweite Weg aufgrund der zusätzlichen Select-Anweisung notwendigerweise die weniger performante Option ist. Wenn der Objekttyp groß ist, aber nur wenige Eigenschaften geändert wurden, kann der Aufwand für das Senden einer vollständigen Aktualisierungsanweisung für alle Felder größer sein als eine Select-Anweisung plus eine "kleine" Aktualisierungsanweisung mit nur den wirklich für das Update erforderlichen Feldern. (Aber das ist nur Spekulation, ich bin kein SQL Server-Spezialist.)

    
Slauma 28.01.2011, 13:47
quelle

Tags und Links