Frage

Ich habe ein Codefirst EF-4.1-basiertes Programm. Der Benutzer erhält einen Kontext und kann einige Eigenschaften ändern. Wenn der Benutzer fertig ist, mache ich schnell

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);

um festzustellen, ob a SaveChanges() ist erforderlich oder nicht. Wenn ich einen "Savechanges ()" -Anruf mache, werden die Änderungen, die vorgenommen wurden, in der Datenbank bestehen.

Dies funktioniert für einige Eigenschaften und funktioniert für andere nicht. Insbesondere scheint es mit einfachen Typen zu funktionieren (floats) und mit Sammlungshierarchien (ObservableCollections).

Mache ich etwas falsch?

War es hilfreich?

Lösung

Ja, das ist ein Problem. Einige Beziehungen werden nicht verfolgt von DbChangeTracker. Es gibt einen Unterschied zwischen Unabhängiger Verein und ausländischer Key Association. Änderungen der Beziehung werden im Falle von: verfolgt:

  • Eins-zu-eins
  • Eins-zu-Viele-Verhältnis zu Foreign Key Association-Sie sollten ausländische Schlüsseleigentum einrichten

Änderungen der Beziehung werden bei: nicht verfolgt:

  • Eins-zu-Viele-Verhältnis zur unabhängigen Vereinigung
  • Viele-zu-Viele-Verhältnisse, die immer eine unabhängige Assoziation sind

Nicht verfolgt für unabhängige Vereinigung ist keine korrekte Benennung. Diese Änderungen werden aber verfolgt DbChangeTracker enthüllt keinen Zugriff auf diese Änderungen! Sie müssen konvertieren DbContext zu ObjectContext und verwenden ObjectStateManager Zugang zu Zugang zu erhalten ObjectStateEntries Darstellung unabhängiger Assoziationen.

In diesem Fall ist das einfachste, einfach anzurufen SaveChanges stets. Es werden keine DB -Befehle ausgeführt, wenn keine Daten gespeichert werden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top