Wenn ich ein neues EF-Objekt anlege, verknüpfe ich es zuerst mit dem DbSet und setze dann eine seiner Navigationseigenschaften auf eine neue Instanz eines anderen EF-Objekts. Ich füge dann die erste EF zum DbSet hinzu und rufe Save auf. Ich erhalte die folgende Ausnahme:Entity Framework InvalidOperationException beim Speichern
System.InvalidOperationException: The changes to the database were committed
successfully, but an error occurred while updating the object context. The
ObjectContext might be in an inconsistent state. Inner exception message: A
referential integrity constraint violation occurred: The property value(s) of
'Location.Id' on one end of a relationship do not match the property value(s)
of 'Pool.LocationId' on the other end.
Hier ist mein Code:
ORMContext context = new ORMContext();
var l = context.Locations.Create();
context.Locations.Attach(l);
...set properties
context.Locations.Add(l);
var p = context.Pools.Create();
context.Pools.Attach(p);
p.Location = l;
...set properties
context.Pools.Add(p);
context.SaveChanges();
Was ich denke, geschieht das Location
Objekt ist neu und seine Id
ist 0
standardmäßig. EF aktualisiert den Fremdschlüssel unter (der auf 0
festgelegt ist), und Location.Id
wird aktualisiert, nachdem das Objekt Location
in der Datenbank gespeichert wurde. So wird Location.Id
jetzt auf den zugehörigen Wert in der Datenbank gesetzt, sagen 149
, und Pool.LocationId
ist immer noch auf 0
festgelegt.
Wie vermeide ich diese Ausnahme? Oder wie soll ich damit umgehen?
vereinbart würden. Das würde das Problem lösen. Dies ist jedoch keine Option. Es würde dann alle anderen Änderungen im DbContext speichern, die ich nicht erzwingen kann, bis der Benutzer auf der Benutzeroberfläche Speichern auswählt. –