如果我有一个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。 –