LINQ to SQL context.SubmitChanges - Как получить подробности об ошибке?

Я работаю над приложением, в которое много данных вставляется одновременно в базу данных SQL. Я использую LINQ to SQL, и у меня есть что-то вроде этой операции вставки:

foreach (var obj в объектах) { context.InsertOnSubmit(obj); } context.SubmitChanges();

Вот проблема: если я получаю исключение (например, DuplicateKeyException), я не знаю, какой объект вызвал проблему. Единственная информация, которую я получаю, - то, что по крайней мере один из объектов содержит значения ключей, которые идентичны некоторым другим ключам в базе данных.

Можно ли извлечь больше информации о том, какой объект (ы) вызвал конфликт?

Конечно, я мог бы вызывать SubmitChanges после каждой вставки InsertOnSubmit, но с количеством вставляемых данных это невероятно медленно.

У кого-нибудь есть советы для меня? Спасибо!

2 ответа

Решение

Друг, я не пытаюсь быть умным alec, и, возможно, я все равно преуспеваю, но мое главное предложение - отказаться от linq для использования при загрузке данных. SSIS создает простой, эффективный и простой в обслуживании код для работы с ETL. Причина в том, что она была разработана именно для этого.

Во-вторых, вы не указываете, какой тип исключения генерируется, и если это исключение при представлении вам содержит ненулевое внутреннее исключение. Это первое место, которое я бы посмотрел.

Удачи.

Я использую Linq для SQL для массовых вставок. Это медленно, это не предназначено для этого, но это просто хорошо вписывается в мой сценарий.

Я использую ctx.Log для отслеживания ошибок. Есть хорошие примеры на http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

Кроме того, я использую ctx.Log, чтобы получить индикатор выполнения, вы можете найти это полезным. Более подробная информация доступна в моем блоге http://epandzo.wordpress.com/2011/01/02/linq-to-sql-ctx-submitchanges-progress/

и вопросы о стекопереработке LINQ to SQL. SubmitChangess() progress

Другие вопросы по тегам