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