使用Count时如何查看EntityFramework生成的sql

时间:2016-08-31 09:33:31

标签: sql-server entity-framework linq

当我生成这样的查询时:

var query = from x in Entities.SomeTable
            select x;

我可以设置断点,将光标悬停在查询上后,我可以看到发送到数据库的SQL命令是什么。不幸的是,当我使用Count

时,我无法做到这一点
var query = (from x in Entities.SomeTable
            select x).Count();

当然我可以看到使用探查器来到SqlServer的是什么,但也许有人知道如何在VS中做到这一点(如果可能的话)。

3 个答案:

答案 0 :(得分:0)

您可以使用ToTraceString()

ObjectQuery<SomeTable> query = (from x in Entities.SomeTable select x).Count();
Console.WriteLine(query.ToTraceString());

答案 1 :(得分:0)

您可以使用Database.Log记录如下所示的任何查询:

using (var context = new MyContext()) 
{ 
    context.Database.Log = Console.Write; 

    // Your code here... 
}

通常,在我的上下文构造函数中,我将其设置为我的记录器(无论是NLog,Log4Net还是股票.net记录器)而不是控制台,但实际的记录工具是无关紧要的。

For more information

答案 2 :(得分:0)

在EF6及更高版本中,您可以在查询之前使用以下内容:

context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

我发现这比拉起SQL Profiler和运行跟踪更快。 另外,本文还讨论了有关该主题的更多信息: How do I view the SQL generated by the Entity Framework?