2015-03-30 5 views
6

के खिलाफ LINQ क्वेरी जांचें .NET में कोई तरीका है यह देखने के लिए कि डेटाबेस के विरुद्ध LINQ क्वेरी क्या हम फायरिंग कर रहे हैं? उदाहरण के लिए। मैं LINQ में एक प्रश्न लिख रहा हूं और मैं देखना चाहता हूं कि डेटाबेस के साथ संवाद करने के लिए SQL क्वेरी क्या फ़ायरिंग कर रही है।SQL सर्वर डेटाबेस

क्या कोई विजुअल स्टूडियो विंडो या कोई अन्य तरीका है?

+0

आप कौन सी आरडीबीएमएस उपयोग करते हैं? –

+1

एसक्यूएल प्रोफाइलर, यदि आप एमएसएसक्यूएल का उपयोग कर रहे हैं। https://www.youtube.com/watch?v=mJ8Dyv4Uk6E –

+0

मैं एसक्यूएल आरडीबीएमएस – Parveen

उत्तर

5

यदि आपके पास एक DbContext जिस पर आप फायरिंग अपने LINQ प्रश्नों आप बस कुछ इस तरह के DbContext.Database.Log गुण सेट कर सकते हैं:

yourContext.Database.Log = (msg => System.Diagnostics.Debug.Write(msg, "SQL")); 

इस के बाद, हर SQL क्वेरी अपने दृश्य से डीबग कंसोल में दिखाई देता है वर्ग एसक्यूएल के साथ स्टूडियो।

+2

के विरुद्ध LINQ की जांच नहीं करना है और यह इस बात पर ध्यान देता है कि किस प्रकार का डेटाबेस उपयोग किया जाता है। – Maarten

3

आप एसक्यूएल प्रोफाइलर का उपयोग यह देखने के लिए कर सकते हैं कि LINQ अभिव्यक्ति का अनुवाद SQL कथन में कैसे किया जाता है।

11

आप की तरह this

var context = new MyContext(); 
context.Database.Log = s => Debug.WriteLine(s); 

कुछ के लिए देख रहे इसके बाद जब भी एक प्रश्न निष्पादित किया जाता है, आप की तरह एक आउटपुट देखेंगे: 30-3-2015 पर

var customers = context.Customers.ToList(); 

खोला कनेक्शन 13:48:03 +02: 00

चुनें [विस्तार 1]। [Guid] AS [Guid],
[Extent1]। [प्रथम] के रूप में [प्रथम],
[Extent1]। [अंतिम नाम] के रूप में [LASTNAME],
[Extent1]। [ईमेल] के रूप में [ईमेल],
[Extent1]। [बनाया गया ] के रूप में [बनाया]
[dbo] से [ग्राहक] [Extent1]

के रूप में

- 30-3-2015 13:48:03 02 पर निष्पादित:। 00

- 0 में पूर्ण परिणाम के साथ एमएस: SqlDataReader

30-3-2015 13:48:03 +02: 00

पर बंद कनेक्शन
+2

और यह इस बात पर ध्यान देता है कि किस प्रकार का डेटाबेस उपयोग किया जाता है। – Maarten

+0

जहां मुझे इस पंक्ति को, विशेष कक्षा में या प्रत्येक कक्षा में जहां देखना चाहते हैं, लिखना है? – Parveen

+1

@ पारवेन आपको इसे तत्काल प्रत्येक संदर्भ में संलग्न करने की आवश्यकता होगी। उस संदर्भ द्वारा निष्पादित सभी प्रश्न लॉग किए जाएंगे। मैंने संदर्भ में संदर्भ घोषणा रेखा जोड़ा। उम्मीद है कि यह – Szeki

2

आप SQL सर्वर प्रोफाइलर, ट्रेस या विस्तारित ईवेंट का भी उपयोग कर सकते हैं। पहले दो बहिष्कृत हैं।

https://technet.microsoft.com/en-us/library/bb630354(v=sql.105).aspx

https://msdn.microsoft.com/en-us/library/ms181091.aspx

https://technet.microsoft.com/en-us/library/ms191006(v=sql.105).aspx

+0

प्रश्न 'या किसी अन्य तरीके' था। तो यह जवाब काफी वैध है। हैलो डाउनवॉटर ... –

2

आप DataContext वस्तु की Log संपत्ति का उपयोग कर सकते हैं। साथ ही, यह आपके द्वारा उपयोग किए जा रहे एप्लिकेशन के प्रकार पर निर्भर करता है।

वेब अनुप्रयोग के लिए: -

db.Log = Response.Output; 

कंसोल आवेदन के लिए: -

db.Log = Console.Out; 

इसके अलावा आप भी DataContext वर्ग के GetCommand विधि का उपयोग कर सकते हैं। Sql Server Profiler फिर से एक स्पष्ट विकल्प है।

संबंधित मुद्दे