Muss ich die Fremdschlüsseleigenschaften manuell festlegen, wenn ich die Zuordnungen ändere?
Ich migriere von Linq-to-SQL zu Entity Framework (4.4), indem ich Database First mit einem DbContext verwende. Ich frage mich, ob das folgende Verhalten normal ist:
using (var e = new AgendaEntities()) {
var store = e.Stores.First();
var office = e.Offices.Create();
office.Store = store; // Set association
Console.WriteLine(office.StoreID); // shows Guid.Empty, expected store.ID!
}
In L2S stellen Sie dieStore
Die Zuordnung zu einer Entität würde auch dieStoreID
Schlüssel. In EF scheint dies nicht der Fall zu sein. Dies ist unabhängig davon, ob die Entitäten neu sind oder aus dem Kontext geladen wurden.
Wenn ichSaveChanges
, es spart richtig und dasStoreID
wird entsprechend aktualisiertoffice.ID
, aber warum passiert das erst nach dem Speichern?
Fehlt mir etwas oder soll ich jetzt Fremdschlüssel manuell synchronisieren?
Lösungsbearbeitung: Dies wird als Eigenschaftsfixup bezeichnet und wird früher von den generierten Proxys automatisch durchgeführt. MitDbContext
das ist nicht mehr der fall. GemäßDieses Connect-ProblemDies ist beabsichtigt.
Hallo, die DbContext-Vorlage generiert eigentlich keine Klassen, die als Change-Tracking-Proxys verwendet werden - nur verzögertes Laden von Proxys (die keine Korrektur durchführen). Wir haben diese Entscheidung getroffen, weil Proxies für die Änderungsverfolgung komplex sind und viele Nuancen aufweisen, die für Entwickler sehr verwirrend sein können. Wenn das Problem vor SaveChanges behoben werden soll, können Sie myContext.ChangeTracker.DetectChanges aufrufen. ~ EF-Team
Eine Alternative ist anzurufenDbContext.Entry(entity)
, wodurch die Entität synchronisiert wird. Dies wird in diesem Artikel beschrieben:Beziehungen und Navigationseigenschaften unter "Synchronisieren der Änderungen zwischen den Eigenschaften FKs und Navigation"