【问题标题】:How to look at sql generated by EntityFramework when Count is used使用Count时如何查看EntityFramework生成的sql
【发布时间】:2017-01-07 19:46:31
【问题描述】:

当我生成这样的查询时:

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

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

var query = (from x in Entities.SomeTable
            select x).Count();

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

【问题讨论】:

标签: sql-server entity-framework linq


【解决方案1】:

你可以使用ToTraceString():

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

【讨论】:

    【解决方案2】:

    您可以使用Database.Log 记录任何这样的查询:

    using (var context = new MyContext()) 
    { 
        context.Database.Log = Console.Write; 
    
        // Your code here... 
    }
    

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

    For more information

    【讨论】:

      【解决方案3】:

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

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

      我发现这比启动 SQL Profiler 并运行跟踪要快。 此外,这篇文章更多地讨论了这个话题: How do I view the SQL generated by the Entity Framework?

      【讨论】:

        猜你喜欢
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        相关资源
        最近更新 更多