Frage

Ich bin an einer Anwendung arbeiten, wo eine Menge von Daten in eine SQL-Datenbank auf einmal eingeführt ist. Ich LINQ to SQL verwenden, und haben so etwas wie dies als meine Einfügeoperation:

foreach (var obj in Objekte) {   context.InsertOnSubmit (OBJ); } context.SubmitChanges ();

Hier ist das Problem: Wenn ich eine Ausnahme erhalten (zum Beispiel DuplicateKeyException), ich habe keine Ahnung, was das Problem verursacht Objekt. Die einzige Information, ich bin immer ist, dass zumindest eines der Objekte Schlüsselwerte enthält, die zu einem anderen Schlüssel in der Datenbank identisch sind.

Ist es möglich, mehr Informationen zu extrahieren, was Objekt (e) verursachte den Konflikt?

Natürlich, ich SubmitChanges nach jedem InsertOnSubmit nennen könnte, aber mit der Menge an Daten, die ich bin das Einfügen, das ist unglaublich langsam.

Wer irgendwelche Tipps für mich? Dank!

War es hilfreich?

Lösung

Freund, ich versuche nicht, einen Smart alec zu sein, und vielleicht sowieso ich Erfolg, aber mein Haupt Vorschlag ist, dass Sie Linq für den Einsatz in Datenlasten verlassen. SSIS produzieren einfach, effizient und einfach Code für ETL Arbeit aufrecht zu erhalten. Grund ist, wurde es entworfen, um genau das zu tun.

Zweitens nicht angeben, welche Art von Ausnahme ausgelöst wird, noch, wenn diese Ausnahme, wenn Sie präsentierten eine nicht null innere Ausnahme enthält. Das ist der erste Ort, den ich aussehen würde.

Viel Glück.

Andere Tipps

Ich verwende Linq für Bulk-Einsätze auf SQL. Es ist langsam, es ist nicht dafür ausgelegt, aber sie paßt einfach gut mit meinem Szenario.

Ich verwende ctx.Log Fehler zu verfolgen. Es gibt schöne Beispiele auf http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

Auch ich bin ctx.Log mit Fortschrittsbalken zu erhalten, können Sie diese nützlich finden. Weitere Informationen finden Sie auf meiner Blog-Post http://epandzo.wordpress.com / 2011/01/02 / Linq-to-sQL-CTX-SubmitChanges-progress /

und Stackoverflow Frage LINQ to SQL SubmitChangess () Fortschritt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top