如何查看由實體框架生成的SQL?

如何查看實體框架生成的SQL? mysql

(在個人特殊狀況下,我正在使用mysql提供程序-若是重要的話) sql


#1樓

若是使用的是DbContext,則能夠執行如下操做來獲取SQL: 數據庫

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

#2樓

有兩種方法: app

  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中: spa

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

這將爲您提供生成的SQL。 調試


#4樓

對於使用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

注意:確保以調試模式運行項目。


#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>
相關文章
相關標籤/搜索