Ich habe Probleme beim Speichern von Änderungen, die an meinen POCOs vorgenommen wurden, zurück in die Datenbank.POCO-Änderungen speichern
Wenn die Anwendung startet, greife ich alle Objekte, die ich brauche in POCO-Objekte, dann wenn ich auf die Schaltfläche "Speichern", ich eine neue ObjectContext-Instanz erstellen, muss ich dann die Objekte Schleife, an den Kontext anhängen und dann Änderungen erkennen und speichern.
public void SaveData() {
using (SolEntities sec = new SolEntities(_cxnStr)) {
foreach (ExtViews.Planet p in Planets) {
sec.CelestialBodies.Attach(p.TheBody);
sec.CelestialBodies.ApplyCurrentValues(p.TheBody);
}
sec.SaveChanges(SaveOptions.AcceptAllChangesAfterSave | SaveOptions.DetectChangesBeforeSave);
}
}
Aber das scheint nicht zu funktionieren, die zwei Möglichkeiten, wie ich es an die Arbeit konnte, war entweder: A) Erstellen Sie eine lokale Liste der Planeten vor der foreach
Schleife (zu zwingen, um sie von zu erzeugenden die Db vor dem Anwenden der geänderten Werte nehme ich an, und entferne die Attach
Anweisung. oder B) Schalten Sie die ApplyCurrentValues
Linie für diese:
sec.ObjectStateManager.ChangeObjectState(p.TheBody, System.Data.EntityState.Modified);
aber manuell die Object zwingen für jedes Objekt modifiziert scheint ein bisschen übertrieben, vor allem, wenn sie nicht geändert haben, bin etwas halten konnte intern von ob es geändert wurde oder nicht, aber ich dachte, dass ApplyCurrentValues das überhaupt tun würde?
Überprüfen Sie meine Antwort hier: http://stackoverflow.com/questions/3635071/update-relationshows-saving-change-of-ef4-poco-objects/3635326#3635326 Es erklärt, warum Sie den Status für festlegen müssen jedes Objekt - wenn Sie nicht verbundene Objekte verwenden, müssen Sie die Synchronisation manuell durchführen. –