Der beste Weg, Masseneinfügungen mit dapper.net zu machen

.net bulkinsert c# dapper sql-server

Frage

Ich verwende den folgenden Code, um Datensätze in eine Tabelle in SQL Server 2014 einzufügen

using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["myConnString"]))
{

   conn.Execute("INSERT statement here", insertList);

}

Die insertList ist eine Liste mit 1 Million Elementen. Ich habe diese Einfügung auf einem i5-Desktop getestet und es hat ungefähr 65 Minuten gedauert, um eine Million Datensätze auf dem gleichen Computer in SQL Server einzufügen. Ich bin mir nicht sicher, wie adrett die Inserts hinter den Kulissen machen. Ich möchte die Datenbankverbindung sicherlich nicht millionenfach öffnen und schließen!

Ist dies der beste Weg, Massen-Inserts in Dapper zu machen oder sollte ich etwas anderes ausprobieren oder mit ADO.Net mit der Enterprise-Bibliothek arbeiten?

BEARBEITEN

Im Nachhinein weiß ich, dass die Verwendung von ADO.Net besser ist, also werde ich meine Frage neu formulieren. Ich würde immer noch gerne wissen, ob das das Beste ist, was Dapper machen kann, oder fehlt mir ein besserer Weg, es in Dapper selbst zu machen?

Expertenantwort

Die beste Methode zum Einfügen mit hervorragender Leistung ist die SqlBulkCopy Verwendung der SqlBulkCopy Klasse, wie Alex und Andreas vorgeschlagen haben.

Disclaimer : Ich bin der Inhaber des Projektes Dapper Plus

Dieses Projekt bietet eine einfache Unterstützung für die folgenden Vorgänge:

  • BulkInsert
  • Bulk-Update
  • Massenlöschung
  • BulkMerge

Indem Sie Mapping verwenden und Werte wie Identity-Spalten ausgeben lassen.

// 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);   

Beliebte Antwort

Wenn Leistung das ist, wonach Sie suchen, empfehle ich, SqlBulkCopy zu verwenden, anstatt mit Dapper einzufügen. Hier finden Sie einige Leistungsvergleiche: http://www.ikriv.com/dev/db/SqlInsert/SqlInsert.html



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum