Linq zu SQL Submitchangess () Fortschritt
-
14-10-2019 - |
Frage
Ich verwende LINQ, um alte DBF -Dateien in MSSQL zu importieren. Ich lese alle Zeilen und füge sie mithilfe der Datenbank hinzu ctx.MyTable.InsertOnSubmit(row)
Nach Abschluss der Lesenphase habe ich rund 100 000 anhängige Einsätze.ctx.SubmitChanges()
Natürlich dauert es lange.
Gibt es eine Möglichkeit, den Fortschritt der zu verfolgen? ctx.submitchanges()
? dürfen ctx.Log
irgendwie für diesen Zweck verwendet werden?
Aktualisieren: Ist es möglich zu verwenden? ctx.GetChangeSet().Inserts.Count
und verfolgen Sie Anweisungen mit dem Protokoll ein?
Dividieren ctx.SubmitChanges()
In kleinere Stücke funktioniert nicht für mich, weil ich Transaktionen, alles oder nichts brauche.
Update 2:Ich habe einen schönen Class -ActionTextWriter gefunden, den ich versuchen werde, Einsätze zu zählen.
http://damieng.com/blog/2008/07/30/linq-t-sql-log-t-debug-window-file-memory-or-multiple-writers
Update 3:
Ich habe den ersten Codeprototyp erstellt, er ist nicht optimiert. Es scheint zu funktionieren :)
ctx.Log = new ActionTextWriter(s => {
counter += s.Split(' ').Count(w => w.ToUpper() == "INSERT");
ReportProgress(counter);
});
Lösung
Ich habe es geschafft, Fortschrittsinformationen zu erhalten, indem ich Protokoll analysiert und actionTextWriter verwendet habe
http://damieng.com/blog/2008/07/30/linq-t-sql-log-t-debug-window-file-memory-or-multiple-writers
ctx.Log = new ActionTextWriter(s => {
if (s.StartsWith("INSERT INTO"))
insertsCount++;
});