2012-04-02 10 views
3

Da ObjectContext.SaveChanges() innerhalb einer Transaktion auftritt, entschied ich, dass meine App zuerst alle Abfragen/Updates auf ObjectContext vor dem Aufruf SaveChanges() einmal ausführen sollte, um die Daten in die Datenbank zu schreiben .Alle Änderungen im ObjectContext spiegeln, ohne in der Datenbank zu bleiben

Allerdings bedeutet dies, dass, wenn ich ein Objekt erstellen und die ObjectContext abfragen es ablehnt es existiert (vor allem, weil die Datenbank noch aktualisiert werden muss). Ich nahm an, dass ich mit einigen der SaveOptions umgehen könnte, aber es sieht nicht wie ich kann.

Ich möchte im Grunde die ObjectContext als Proxy handeln, die ich ändern kann, wie ich alle auf einmal verpflichten will. Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

6

Wenn Sie keine Änderungen speichern, sind Ihre neuen Objekte nicht in der Datenbank vorhanden und keine Abfrage, die für die Datenbank ausgeführt wird (= keine Abfrage von Linq an Entitäten), gibt sie zurück. Um Objekte hinzugefügt Kontext aber nicht gespeichert noch müssen Sie abfragen ObjectStateManager:

var data = context.ObjectStateManager 
        .GetObjectStateEntries(EntityState.Added) 
        .Where(e => !e.IsRelationship) 
        .Select(e => e.Entity) 
        .OfType<YourEntityType>(); 
0

Ich hatte etwas in diese Richtung in einer ähnlichen Situation zu tun:

eine Liste von Schlüsseln und Werten gegeben, wobei einige der Schlüssel sind neu, und wollen Schlüssel und Werte in einem einzigen SaveChanges aktualisieren, ich zuerst alle vorhandenen Schlüssel herunterziehen, dann eine separate Sammlung von keysIncludingNewOnes, die nur die vorhandenen Schlüssel enthält, aber Außerdem werden neu hinzugefügte Schlüssel hinzugefügt.

Wenn ich nach einem Schlüsselobjekt suche, um einen Wert zuzuordnen, suche ich in keysIncludingNewOnes, anstatt den Kontext abzufragen, da (wie Sie gefunden haben) der Kontext über die neuen Schlüssel erst bekannt ist a SaveChanges.

Es sollte relativ einfach für Sie sein, sich an Ihre 'pending addition'-Objekte zu erinnern; Wenn nicht, haben Sie möglicherweise einen zu langlebigen Kontext, der im Allgemeinen seine eigenen Probleme schafft.