Domanda

Sto lavorando su un'applicazione in cui un sacco di dati viene inserito in un database SQL in una sola volta. Io uso LINQ to SQL, e avere qualcosa di simile come la mia operazione di inserimento:

foreach (var obj negli oggetti) {   context.InsertOnSubmit (obj); } context.SubmitChanges ();

Ecco il problema: Se ricevo un'eccezione (per esempio, DuplicateKeyException), non ho idea di cosa oggetto ha causato il problema. L'unica informazione che sto ottenendo è che almeno uno degli oggetti contiene valori chiave che sono identici a qualche altra chiave nel database.

E 'possibile estrarre più informazioni su quale oggetto (s) ha causato il conflitto?

Naturalmente, ho potuto chiamare SubmitChanges dopo ogni InsertOnSubmit, ma con la quantità di dati che sto inserendo, questo è incredibilmente lento.

Qualcuno ha qualche consiglio per me? Grazie!

È stato utile?

Soluzione

Amico, non sto cercando di essere un alec intelligente, e forse ci sto riuscendo in ogni modo, ma il mio suggerimento principale è che si abbandona LINQ per l'uso in carichi di dati. SSIS produce semplice, efficiente e facile da mantenere il codice per il lavoro ETL. La ragione di essere, è stato progettato per fare proprio questo.

In secondo luogo, non si specifica quale tipo di eccezione viene gettata, né se tale eccezione quando presentato a voi contiene un'eccezione interna non nullo. Questo è il primo luogo vorrei guardare.

In bocca al lupo.

Altri suggerimenti

Sto usando LINQ to SQL per inserti di massa. E 'lento, non è progettato per questo, ma si adatta bene con solo il mio scenario.

sto usando ctx.Log per monitorare gli errori. Ci sono belle esempi su http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

Inoltre, sto usando ctx.Log per ottenere barra di avanzamento, si potrebbe scoprire che utile. Maggiori dettagli sono disponibili nel mio blog http://epandzo.wordpress.com / 2011/01/02 / LINQ to SQL-CTX-SubmitChanges-progress /

e domanda StackOverflow LINQ to SQL SubmitChangess () progredire

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top