Basierend auf diesem Code auf Dappers github-Seite habe ich eine Bulk-Insert-Anweisung erstellt.
Dapper teilt die Abfrage in mehrere einzelne SQL-Insert-Anweisungen auf (wie im SQL-Profiler zu sehen).
Ist es möglich, sie anzuweisen, mehrere Operationen in eine einzige Operation zu ändern, um die Anzahl der DB-Fahrten zu reduzieren, ohne manuell mehrere INSERT-Anweisungen wie unten erstellen zu müssen?
insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);
Ist es möglich, sie anzuweisen, mehrere Operationen in eine einzige Operation zu ändern?
Nein
Es gibt im Allgemeinen zwei Antworten, um Massenoperationen zu ermöglichen:
Wie @ iSR5 im Kommentarbereich beantwortet hat: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy
Sie werden nichts schneller finden.
Disclaimer : Ich bin der Inhaber des Projektes Dapper Plus
Dieses Projekt ist nicht kostenlos, bietet aber alle Bulk-Operationen:
(Verwenden Sie unter der Haube SqlBulkCopy
)
Und einige weitere Optionen wie die Ausgabe von Identitätswerten:
// CONFIGURE & MAP entity
DapperPlusManager.Entity<Order>()
.Table("Orders")
.Identity(x => x.ID);
// CHAIN & SAVE entity
connection.BulkInsert(orders)
.AlsoInsert(order => order.Items);
.Include(x => x.ThenMerge(order => order.Invoice)
.AlsoMerge(invoice => invoice.Items))
.AlsoMerge(x => x.ShippingAddress);
EDIT: Kommentar beantworten
SqlBulkCopy kann jedoch nur mit MS SQL Server verwendet werden. Ist es nicht?
Genau, SqlBulkCopy ist nur mit SQL Server kompatibel. Unsere Bibliothek unterstützt mehrere Anbieter: