如果我有一個LINQ到SQL語句,例如鑑於LINQ產生
var query = (from a in this.Context.Apples select a.Name).ToList();
當我想看到的是被LINQ
產生什麼SQL的SQL,我做的是我註釋掉ToList()
和在這個LINQ
聲明之後在命令上放置一個斷點,然後我可以將它懸停並讀取SQL。
我的問題:這是獲得生成的SQL的正確方法嗎?
如果我有一個LINQ到SQL語句,例如鑑於LINQ產生
var query = (from a in this.Context.Apples select a.Name).ToList();
當我想看到的是被LINQ
產生什麼SQL的SQL,我做的是我註釋掉ToList()
和在這個LINQ
聲明之後在命令上放置一個斷點,然後我可以將它懸停並讀取SQL。
我的問題:這是獲得生成的SQL的正確方法嗎?
是的,這是一個正確的做法,但當然,還有其他:
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();
而且還Linqpad:
您還可以在上下文中的日誌屬性設置爲:
public class MyContext : DbContext{
MyContext(){
Database.Log = Console.WriteLine;
//or like this
//Database.Log = message => Trace.TraceInformation(message);
}
}
您也可以使用SQL Server Profiler,添加一個trace,看看生成的查詢,因爲它們是由服務器執行。
我更喜歡使用LinqPad。它有一個「SQL」選項卡來顯示生成的SQL。 –