2016-01-21 15 views
7

Jeśli mam LINQ to SQL npWidząc SQL że LINQ generuje

var query = (from a in this.Context.Apples select a.Name).ToList(); 

Gdy chcę zobaczyć, co SQL jest generowany przez LINQ, co robię, jest to, że zakomentuj ToList() i umieść punkt przerwania w komendzie po tym oświadczeniu LINQ, a następnie mogę najechać na niego i odczytać kod SQL.

Moje pytanie: czy to jest poprawny sposób uzyskania wygenerowanego kodu SQL?

+1

I wolą używać LINQPad. Posiada zakładkę "SQL", która pokazuje wygenerowany SQL. –

Odpowiedz

3

Tak, to jest prawidłowy sposób, ale oczywiście są też inni:

var context = new DataClasses1DataContext(); 

var sb = new StringWriter(); 
context.Log = sb; 

var query = (from a in context.Persons select a.Name); 

string s = query.ToString(); 
string command = context.GetCommand(query).CommandText; 

//The log requires the query to actually hit the database 
query.ToList(); 
string log = sb.ToString(); 

A także LINQPad:

enter image description here

5

Można również ustawić właściwość dziennik z kontekstu do:

public class MyContext : DbContext{ 

    MyContext(){ 
     Database.Log = Console.WriteLine; 
     //or like this 
     //Database.Log = message => Trace.TraceInformation(message); 
    } 
} 
1

Można również użyć SQL Server Profiler, dodać ślad i zobacz generowanych zapytań, ponieważ są one wykonywane przez serwer.