Speichern einer einzelnen Entität anstelle des gesamten Kontexts

c# entity-framework

Frage

Ich bin in ein Szenario geraten, in dem ich im Wesentlichen die Änderungen einer untergeordneten Entität einer Eins-zu-Viele-Zuordnung zur Datenbank schreiben muss, ohne jedoch die an der übergeordneten Entität vorgenommenen Änderungen zu speichern.

Das Entity Framework beschäftigt sich derzeit mit Datenbank-Commits im Kontextbereich (EntityContext.SaveChanges ()), was zum Durchsetzen von Beziehungen sinnvoll ist -grained Datenbank-Commit für einzelne Entites statt für den gesamten Kontext.

Akzeptierte Antwort

Best Practices? Meinst du nebenbei "Tu es nicht!"

Ich denke nicht, dass es eine bewährte Methode gibt, einen ObjectContext anders als den Zustand der Datenbank zu gestalten.

Wenn Sie dies tun müssen, würde ich einen neuen ObjectContext neu erstellen und dort die Änderungen an der untergeordneten Entität vornehmen. Auf diese Weise sind beide Kontexte konsistent.


Beliebte Antwort

Ich habe ein ähnliches Bedürfnis. Die Lösung, die ich erwäge, ist die Implementierung von Wrapper-Eigenschaften für alle Entitäten, die alle Eigenschaftsänderungen privat speichern, ohne die eigentliche Entitätseigenschaft zu beeinflussen. Dann füge ich der Entität eine SaveChanges () - Methode hinzu, die die Änderungen in die Entität schreibt und dann SaveChanges () im Kontext aufruft.

Das Problem bei diesem Ansatz besteht darin, dass alle Entitäten diesem Muster entsprechen müssen. Aber es scheint ziemlich gut zu funktionieren. Ein weiterer Nachteil besteht darin, dass bei vielen Änderungen an vielen Objekten mit vielen Daten am Ende unnötige Kopien im Speicher verbleiben.

Die einzige andere Lösung, die ich mir vorstellen kann, ist, beim Speichern der Änderungen die Entitätszustände aller geänderten / hinzugefügten / gelöschten Entitäten zu speichern, sie auf "Unmodified" zu setzen, mit Ausnahme der von Ihnen geänderten, die Änderungen speichern und dann den Zustand von wiederherstellen die anderen Entitäten. Aber das hört sich möglicherweise langsam an.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum