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);
});
War es hilfreich?

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++;
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top