2017-01-01 77 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编译器指令有条件地添加日志记录操作。