Effizienter Weg, Bulk-Insert / Update mit Entity Framework durchzuführen
Habe ich eine Liste von Personen, und ich möchte legen Sie Sie in einer Datenbank. Wenn die Person bereits in der Datenbank vorhanden ist, wie ist es dann übersprungen werden muss. Wenn Ihr in der Datenbank, aber mit unterschiedlichen Werten haben, dann muss aktualisiert werden.
Gibt es eine Möglichkeit, dies zu tun, andere als db-aufrufen pro Artikel?
Mein plan ist, zu versuchen, eine insert -, wenn eine unique-Einschränkung Ausnahme auf die-Taste ausgelöst wird, dann machen Sie ein update.
InformationsquelleAutor der Frage Ian Warburton | 2013-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach nicht mit Entity Framework in diesem Fall. Nur eine gespeicherte Prozedur verwenden (wie, hängt von der version/Methode, die Sie verwenden, mit EF, die Sie möglicherweise haben, zu erweitern, Ihre
DbContext
oder fügen Sie ein mapping der entity model).Wenn Sie mithilfe von SQL Server, die sich dann in Ihrem store-Prozedur, verwenden Sie die
MERGE
Befehl, der effizient funktioniert genauwas Sie brauchen: legen Sie, falls es nicht existiert, oder update, wenn es funktioniert. Alles in einem einzigen, effiziente SQL-Abfrage.InformationsquelleAutor der Antwort ken2k
EF ist nicht geeignet für BULK-inserts.
Für 1000 Datensätze es ok, aber große zahlen (100k plus) langsam.
Wenn Sie planen, zu verwenden, EF.
zB
Wenn das kopieren nicht verknüpften Daten können Sie versuchen, die Tabellen parallel (doh)
InformationsquelleAutor der Antwort phil soady
Habe ich eine Erweiterung für die
https://efbulkinsert.codeplex.com/
und es ist wirklich einfach zu bedienen
InformationsquelleAutor der Antwort maxlego
Erstellen einer temp-Tabelle:
SqlCommand(string.Format("SELECT TOP 0 * IN {0} VON {1}...
Bulk insert-Daten in es -- Entity Framework Erweitert, die oben erwähnt würde optimiert werden müssen, um die Unterstützung der temp-Tabelle Namen, aber ansonsten ist auf dem richtigen Weg -- oder Rollen Sie ein Stück code, und verwenden Sie SqlBulkCopy.
Konstruieren Sie eine MERGE-Anweisung.
Wenn Sie mir eine Liste Eigenschaft die du machen kannst (2) und (3) allgemein. Ich kann Lesen und Zusammenführen von 150.000 Zeilen in etwa 20 Sekunden.
InformationsquelleAutor der Antwort Jeff Dunlop