LINQ to SQL context.SubmitChanges - Come ottenere i dettagli di errore?
-
29-09-2019 - |
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!
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