Meine Frage geht von einfachen Einfügungen in eine Tabelle ohne relevante Beziehungen aus.Setzt DbContext.SaveChanges() neue Datensätze in der Reihenfolge ein, in der sie zu DbSet hinzugefügt wurden?
// various unrelated operations w/context...
var one = new DbRecord();
var two = new DbRecord();
var thr = new DbRecord();
context.DbRecords.Add(one);
context.DbRecords.Add(two);
context.DbRecords.Add(thr);
// various unrelated operations w/context...
context.SaveChanges();
In diesem Fall werden meine DbRecord Einheiten immer in der Reihenfolge eingefügt ich sich den DbSet hinzugefügt? Sie scheinen in meinen Tests zu sein, aber kann ich mich darauf verlassen?
"verschiedene nicht verwandte Operationen" bezieht sich auf Operationen auf verschiedenen, nicht verwandten DbSets des gleichen Kontextes; Einfügungen, Löschungen und aktualisierte Entitäten (POCOs in meinem Fall)
Ich möchte, dass sie in exakter Reihenfolge eingefügt werden, so dass ich das PK/Identity-Feld zum Sortieren verwenden kann, aber ich muss auch die implizite nutzen Transaktion, die der Kontext um mein context.SaveChanges() bereitstellt. Obwohl die anderen Operationen nicht in Bezug auf das Datenbankschema verwandt sind, sind die Einträge selbst im Wesentlichen Protokolleinträge über die ausgeführten Aktualisierungen und ihre Reihenfolge ist kritisch.
Wenn der Kontext nicht garantiert, dass die Datensätze in der gleichen Reihenfolge eingefügt werden, muss ich den Datensätzen ein Datetime-Feld hinzufügen und das Zurückrollen selbst übernehmen.
Warum? In der Datenbank selbst gibt es keine "Reihenfolge der Einfügung". Verwenden Sie in den Abfragen eine ORDER BY-Anweisung. –
@Henk Ich werde wahrscheinlich ein Datetime-Feld verwenden und danach sortieren. Ich versuche zu sehen, ob ich nach dem Feld identity/pk sortieren kann. –
@Henk: Natürlich hat eine Datenbank das Konzept der Reihenfolge der Insertion. Wenn Sie eine Identitätsspalte haben, ist der Wert dieser Spalte im Wesentlichen die Reihenfolge der Einfügung. Sie können dann nach dieser Spalte sortieren und die Datensätze in der Reihenfolge des Einfügens zurückerhalten. –