协慌网

登录 贡献 社区

如何查看由实体框架生成的 SQL?

如何查看实体框架生成的 SQL?

(在我特殊的情况下,我正在使用 mysql 提供程序 - 如果重要的话)

答案

对于使用 Entity Framework 6 及更高版本的用户,如果要像我一样在 Visual Studio 中查看输出 SQL,则必须使用新的日志记录 / 拦截功能。

添加以下行将在 Visual Studio 输出面板中吐出生成的 SQL(以及其他与执行相关的详细信息):

using (MyDatabaseEntities context = new MyDatabaseEntities())
{
    context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
    // query the database using EF here.
}

在这个漂亮的博客系列中,有关登录 EF6 的更多信息: http://blog.oneunicorn.com/2013/05/08/ef6-sql-logging-part-1-simple-logging/

注意:确保以调试模式运行项目。

您可以执行以下操作:

IQueryable query = from x in appEntities
             where x.id == 32
             select x;

var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();

或在 EF6 中:

var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query)
            .ToTraceString();

这将为您提供生成的 SQL。

从 EF6.1 开始,您可以使用拦截器来注册数据库记录器。请参阅此处的“拦截器” 和 “记录数据库操作” 一章

<interceptors> 
  <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"> 
    <parameters> 
      <parameter value="C:\Temp\LogOutput.txt"/> 
      <parameter value="true" type="System.Boolean"/> 
    </parameters> 
  </interceptor> 
</interceptors>