2015-03-30 9 views
6

Czy jest jakiś sposób w .NET, aby zobaczyć, co kwerendy LINQ przeciwko bazy danych, które uruchamiamy? Na przykład Wczytam zapytanie w LINQ i chcę zobaczyć, jakie zapytanie SQL uruchamia komunikację z bazą danych.Sprawdź zapytanie LINQ na bazę danych SQL Server

Czy istnieje okno Visual Studio lub w jakikolwiek inny sposób?

+0

Z jakiego RDBMS korzystasz? –

+1

Profil SQL, jeśli używasz MSSQL. https://www.youtube.com/watch?v=mJ8Dyv4Uk6E –

+0

Używam SQL RDBMS – Parveen

Odpowiedz

5

Jeśli masz DbContext na którym wypalanie Twój LINQ kwerendy można po prostu ustawić właściwość DbContext.Database.Log aby coś takiego:

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

Po tym, każdy zapytań SQL pokazuje się w konsoli debugowania ze swojego wizualna Studio z kategorią SQL.

+2

Działa to niezależnie od typu bazy danych. – Maarten

3

Możesz użyć programu SQL Profiler, aby sprawdzić, w jaki sposób wyrażenie LINQ jest tłumaczone na instrukcję SQL.

11

Szukasz czegoś jak this

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

Wtedy, gdy kwerenda jest wykonywana, zobaczysz wyjście jak:

var customers = context.Customers.ToList(); 

Czynny połączenia przy 30-3-2015 13:48:03 +02: 00

WYBIERZ [Zasięg1]. [Guid] AS [Guid],
[Extent1]. [FirstName] jako [FirstName],
[Extent1]. [Nazwisko] jako [LastName],
[Extent1]. [E-mail] AS [E]
[Extent1]. [Utworzono ] AS [Utworzono]
FROM [dbo] [klienta] AS [Extent1]

- Wykonywanie w 30-3-2015 13:48:03 +02. 00

- Zakończony w 0 ms z wynikiem: SqlDataReader

Zamknięte połączenie na 30-3-2015 13:48:03 +02: 00

+2

Działa to niezależnie od typu bazy danych. – Maarten

+0

Gdzie muszę napisać tę linię, w szczególności w klasie lub w każdej klasie, gdzie chce się sprawdzić? – Parveen

+1

@Parveen Musisz dołączyć go do każdego kontekstu, który stworzysz. Wszystkie zapytania wykonywane przez ten kontekst będą rejestrowane. Dodałem linię deklaracji kontekstu do odpowiedzi. Mam nadzieję, że to pomaga – Szeki

2

Można użyć właściwości obiektu DataContext Log. Ponadto zależy to od rodzaju aplikacji, z której korzystasz.

dla aplikacji internetowych: -

db.Log = Response.Output; 

do stosowania konsoli: -

db.Log = Console.Out; 

Oprócz tego można również zastosować metodę DataContext klasy GetCommand. Sql Server Profiler znów jest oczywistą opcją.

Powiązane problemy