【推荐】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楼
有两种方法:
- 要查看将要生成的SQL,只需调用
ToTraceString()
。 您可以将其添加到监视窗口中并设置断点,以查看任何LINQ查询在任何给定点的查询。 - 您可以将跟踪器附加到所选的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>
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3153447