如何查看實體框架生成的SQL? mysql
(在個人特殊狀況下,我正在使用mysql提供程序-若是重要的話) sql
若是使用的是DbContext,則能夠執行如下操做來獲取SQL: 數據庫
var result = from i in myContext.appEntities select new Model { field = i.stuff, }; var sql = result.ToString();
有兩種方法: app
ToTraceString()
。 您能夠將其添加到監視窗口中並設置斷點,以查看任何LINQ查詢在任何給定點的查詢。 tail -f
查詢日誌。 您能夠在官方文檔中瞭解有關MySQL的日誌記錄功能的更多信息。 對於SQL Server,最簡單的方法是使用附帶的SQL Server Profiler。 您能夠執行如下操做: 框架
IQueryable query = from x in appEntities where x.id = 32 select x; var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();
或在EF6中: spa
var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query) .ToTraceString();
這將爲您提供生成的SQL。 調試
對於使用Entity Framework 6及更高版本的用戶,若是要像我同樣在Visual Studio中查看輸出SQL,則必須使用新的日誌記錄/攔截功能。 日誌
添加如下行將在Visual Studio輸出面板中吐出生成的SQL(以及其餘與執行相關的詳細信息): code
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/ blog
注意:確保以調試模式運行項目。
從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>