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

孤街浪徒 提交于 2020-01-07 01:06:34

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

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


#1楼

如果使用的是DbContext,则可以执行以下操作来获取SQL:

var result = from i in myContext.appEntities
             select new Model
             {
                 field = i.stuff,
             };
var sql = result.ToString();

#2楼

有两种方法:

  1. 要查看将要生成的SQL,只需调用ToTraceString() 。 您可以将其添加到监视窗口中并设置断点,以查看任何LINQ查询在任何给定点的查询。
  2. 您可以将跟踪器附加到所选的SQL Server,这将向您显示最终查询的所有详细信息。 对于MySQL,跟踪查询的最简单方法是使用tail -f查询日志。 您可以在官方文档中了解有关MySQL的日志记录功能的更多信息。 对于SQL Server,最简单的方法是使用附带的SQL Server Profiler。

#3楼

您可以执行以下操作:

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。


#4楼

对于使用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/

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


#5楼

从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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!