LINQ إلى SQL CONTEXT.Submitchanges - كيفية الحصول على تفاصيل الخطأ؟

StackOverflow https://stackoverflow.com/questions/3099759

سؤال

أنا أعمل على تطبيق يتم فيه إدراج الكثير من البيانات في قاعدة بيانات SQL في وقت واحد. أستخدم LINQ إلى SQL ، ولدي شيء من هذا القبيل كعملية إدراجي:

foreach (var obj في الكائنات) {context.insertonsubmit (obj) ؛ } context.submitchanges () ؛

إليك المشكلة: إذا حصلت على استثناء (على سبيل المثال ، DuplicateKeyException) ، لا يوجد أي فكرة عن الكائن الذي تسبب في المشكلة. المعلومات الوحيدة التي أحصل عليها هي أن أحد الكائنات على الأقل يحتوي على قيم رئيسية متطابقة مع بعض المفاتيح الأخرى في قاعدة البيانات.

هل من الممكن استخراج مزيد من المعلومات حول ما هو الكائنات (الكائنات) التي تسببت في الصراع؟

بالطبع ، يمكنني استدعاء Submitchanges بعد كل إدراج كل إدراج ، ولكن مع كمية البيانات التي أقوم بإدراجها ، فإن هذا بطيء بشكل لا يصدق.

أي شخص لديه أي نصائح لي؟ شكرًا!

هل كانت مفيدة؟

المحلول

صديق ، أنا لا أحاول أن أكون أليك ذكي ، وربما أنجح على أي حال ، لكن اقتراحي الرئيسي هو أن تتخلى عن 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/

وسؤال stackoverflowLINQ إلى SQL Submitchangess () تقدم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top