حيل ذكية للعثور على استعلامات LINQ محددة في ملف تعريف SQL

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

  •  11-07-2019
  •  | 
  •  

سؤال

يعد تحديد ملفات تعريف استعلامات LINQ وخطط تنفيذها أمرًا مهمًا بشكل خاص نظرًا لـ SQL المجنون الذي يمكن إنشاؤه في بعض الأحيان.

غالبًا ما أجد أنني بحاجة إلى تتبع استعلام معين وأواجه صعوبة في العثور عليه في محلل الاستعلام.غالبًا ما أفعل ذلك على قاعدة بيانات تحتوي على الكثير من المعاملات الجارية (أحيانًا خادم الإنتاج) - لذا فإن مجرد فتح ملف التعريف ليس جيدًا.

لقد وجدت أيضًا أن محاولة استخدام DataContext للتتبع غير كافية، نظرًا لأنه لا يمنحني SQL يمكنني بالفعل تنفيذه بنفسي.

أفضل إستراتيجيتي حتى الآن هي إضافة رقم "عشوائي" إلى استعلامي، وتصفيته في التتبع.

لينك:

where o.CompletedOrderID != "59872547981"

مرشح الملف التعريفي:

'TextData' like '%59872547981'

هذا يعمل بشكل جيد مع بعض التحذيرات:

  • يجب أن أكون حريصًا على تذكر إزالة المعايير، أو اختيار شيء لن يؤثر على خطة الاستعلام كثيرًا.نعم أعلم أن ترك الأمر فيه يسبب المتاعب.
  • بقدر ما أستطيع أن أقول، حتى مع هذا النهج أحتاج إلى بدء تتبع جديد لكل استعلام LINQ أحتاج إلى تتبعه.إذا ذهبت إلى "ملف > خصائص" لتتبع موجود، فلا يمكنني تغيير معايير التصفية.

لا يمكنك التغلب على تشغيل استعلام في تطبيقك ورؤيته ينبثق في ملف التعريف دون أي جهد إضافي.كنت آمل فقط أن يكون شخص آخر قد توصل إلى طريقة أفضل من هذه، أو على الأقل يقترح رمزًا مميزًا أقل "خطورة" للبحث عنه بدلاً من الاستعلام في عمود.

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

المحلول

ربما لا يكون العبث بشرط المكان هو أفضل ما يمكنك فعله لأنه يمكن أن يؤثر وسيؤثر على خطط التنفيذ لاستفساراتك.

افعل شيئًا غير تقليدي مع الإسقاط في فئات مجهولة بدلاً من ذلك - استخدم اسم عمود ثابتًا فريدًا أو شيئًا لن يؤثر على خطة التنفيذ.(وبهذه الطريقة يمكنك تركه كما هو في كود الإنتاج في حالة احتياجك لاحقًا إلى القيام بأي تصنيف لكود الإنتاج...)

from someobject in dc.SomeTable
where someobject.xyz = 123
select new { MyObject = someobject, QueryTraceID1234132412='boo' }

نصائح أخرى

يمكنك استخدام Linq to SQL Debug Visualiser - http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx ورؤيته في نافذة ساعتك.

أو يمكنك استخدام DataContext.GetCommand(); لرؤية SQL قبل تنفيذه.

يمكنك أيضًا إلقاء نظرة على DataContext.GetChangeSet() لعرض ما سيتم إدراجه/تحديثه أو حذفه.

يمكنك جعل سياق البيانات الخاص بك يسجل الخروج من SQL الأولي، والذي يمكنك بعد ذلك البحث عنه في ملف التعريف لفحص الأداء.

using System.Diagnostics.Debugger;

yourDataContext.Log = new DebuggerWriter();

سيتم عرض جميع استعلامات SQL الخاصة بك في نافذة إخراج مصحح الأخطاء الآن.

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