Sql server 如何针对SQL Server分析实体框架活动?

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属性都可以设置为委托。最

使用SQL Server Profiler跟踪存储过程活动很容易。但是如何通过实体框架跟踪LINQ发出的SQL查询呢?我需要确定这样的查询(LINQ代码),它们占用大量时间,调用频率最高,因此是优化的首选

将此密钥添加到连接字符串中:

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)

  • 结果值的一些指示


您仍然可以使用SQL Server Profiler查看最终后端上发生的事情,或者直接查看EF代码谢谢。Profiler是否会识别占用大部分调用/时间的具体LINQ语句/查询?实体框架是在此应用程序中访问SQL Server的唯一方法。也就是说,是否有方法将探查器中的行映射到应用程序代码中的LINQ行?探查器记录所消耗的时间/资源,是的,您可以使用Database.Log(需要更改配置/代码)为了登录代码…不幸的是,我们的项目使用ObjectContext—很可能您提到了Database.log属性,并将此属性设置为将DbContext生成的SQL记录到给定的委托?