Kap*_*nir 5 sql-server entity-framework sql-server-profiler
使用SQL Server Profiler跟踪存储过程的活动很容易。但是如何通过实体框架跟踪LINQ发出的SQL查询呢?我需要确定这样的查询(LINQ代码),它们消耗大量时间,被最频繁地调用,因此是进行优化的第一个候选对象。
将此键添加到您的连接字符串中:
Application Name=EntityFramework
Run Code Online (Sandbox Code Playgroud)
并在 Profiler 中按此过滤
我发现了有用的DbContext.Database.Log财产。
MSDN 文章记录和拦截数据库操作
\n该DbContext.Database.Log属性可以设置为任何采用字符串的方法的委托。最常见的是TextWriter通过将其设置为该 TextWriter 的 \xe2\x80\x9cWrite\xe2\x80\x9d 方法来与 any 一起使用。当前上下文生成的所有 SQL 都将记录到该编写器。例如,以下代码会将 SQL 记录到控制台:
using (var context = new BlogContext())\n{\n context.Database.Log = Console.Write;\n\n // Your code here...\n}\nRun Code Online (Sandbox Code Playgroud)\n记录了什么?
\n设置 Log 属性后,将记录以下所有内容:
\n执行命令所花费的大约时间。请注意,这是从发送命令到返回结果对象的时间。它不包括读取结果的时间。
\n适用于所有不同类型命令的 SQL。例如:\n查询,包括普通 LINQ 查询、eSQL 查询以及来自 SqlQuery 等方法的原始查询
\n作为 SaveChanges 的一部分生成的插入、更新和删除
\n关系加载查询,例如延迟加载生成的查询
\n参数
\n命令是否异步执行
\n指示命令开始执行时间的时间戳
\n命令是否成功完成、是否因引发异常而失败,或者对于异步是否被取消
\n结果值的一些指示
\n| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |