Sql server 如何针对SQL Server分析实体框架活动?
使用SQL Server Profiler跟踪存储过程活动很容易。但是如何通过实体框架跟踪LINQ发出的SQL查询呢?我需要确定这样的查询(LINQ代码),它们占用大量时间,调用频率最高,因此是优化的首选 将此密钥添加到连接字符串中:Sql server 如何针对SQL Server分析实体框架活动?,sql-server,entity-framework,sql-server-profiler,Sql Server,Entity Framework,Sql Server Profiler,使用SQL Server Profiler跟踪存储过程活动很容易。但是如何通过实体框架跟踪LINQ发出的SQL查询呢?我需要确定这样的查询(LINQ代码),它们占用大量时间,调用频率最高,因此是优化的首选 将此密钥添加到连接字符串中: Application Name=EntityFramework 并在分析器中按此进行筛选我发现了有用的DbContext.Database.Log属性 MSDN文章 对于任何采用字符串的方法,DbContext.Database.Log属性都可以设置为委托。最
Application Name=EntityFramework
并在分析器中按此进行筛选我发现了有用的
DbContext.Database.Log
属性
MSDN文章
对于任何采用字符串的方法,DbContext.Database.Log
属性都可以设置为委托。最常用的方法是将其设置为任何TextWriter
的“Write”方法。当前上下文生成的所有SQL都将记录到该编写器。例如,以下代码将SQL记录到控制台:
using (var context = new BlogContext())
{
context.Database.Log = Console.Write;
// Your code here...
}
记录了什么?
设置日志属性后,将记录以下所有内容:
- 执行命令所需的大致时间。请注意,这是从发送命令到返回结果对象的时间。它不包括阅读结果的时间
- 用于所有不同类型命令的SQL。例如: 查询,包括普通LINQ查询、eSQL查询和来自SqlQuery等方法的原始查询
- 作为SaveChanges的一部分生成的插入、更新和删除
- 关系加载查询,如延迟加载生成的查询
- 参数
- 是否异步执行该命令
- 指示命令开始执行的时间戳
- 命令是否已成功完成,是否因引发异常而失败,或者是否已取消(对于async)
- 结果值的一些指示