2017-01-01 54 views
0

我已經使用一些實體框架廓線儀,如螞蟻和一些其他類似的替代品開始。在分析器分析之後,它列出了由Entity Framework生成的SQL查詢格式中的所有實體框架瓶頸。但我無法跟蹤代碼中的哪個查詢。是否有可能知道哪一行代碼運行該SQL查詢?找出哪些代碼運行實體框架的SQL代碼

+0

您可以登錄所有的LINQ(SQL生成)查詢您的code..by在文件中記錄它們 –

回答

1

我不認爲你可以讓螞蟻做到這一點(只有展鵬可以)。

但是在進行性能分析時,您可以通過將日誌Action附加到上下文的Database.Log屬性來始終記錄所有SQL語句。

在此記錄操作時,您還可以登錄堆棧跟蹤在那一刻,然後試圖找到報道的SQL瓶頸的調試日誌記錄:

using (var db = new MyContext()) 
{ 
    db.Database.Log = s => 
    { 
     Debug.WriteLine(s); 
     if (s.StartsWith("SELECT")) 
      Debug.WriteLine("\nStack trace:\n" + 
       string.Join("", new StackTrace(3).GetFrames().ToList())); 
    }; 
    // LINQ statements here. 
} 

一些評論

  • 我用new StackTrace(3)跳過覆蓋記錄過程本身的前幾幀。在堆棧跟蹤的某處,您會發現觸發記錄的SQL語句的C#方法。
  • 這僅記錄了SELECT命令的堆棧跟蹤。通常,那些是你想分析的。

從上下文工廠獲取您的上下文實例是一個好主意,因此您只能編寫一次此記錄代碼。您可能需要通過if DEBUG編譯器指令有條件地添加日誌記錄操作。