sql - 使用 Entity Framework CTP 5 "code only"时,如何获取 LINQ 查询背后的原始 SQL?

标签 sql entity-framework profiling code-first ef4-code-only

我在“仅代码”模式下使用 Entity Framework CTP5。我正在对从数据库返回的对象运行 LINQ 查询,因为查询运行非常缓慢。有什么方法可以获取从查询中生成的 SQL 语句?

Topic currentTopic =
    (from x in Repository.Topics
     let isCurrent = (x.StoppedAt <= x.StartedAt || (x.StartedAt >= currentTopicsStartedAtOrAfter))
     where x.Meeting.Manager.User.Id == user.Id && isCurrent
     orderby x.StartedAt descending
     select x).FirstOrDefault();

“Repository”属性是 DbContext 的后代。

这有点复杂,因为 EF 不能在对象上使用我的辅助方法,所以我直接在查询中指定逻辑。

那么,有什么方法可以转储将由该 LINQ 查询生成的 SQL(例如到我的 log4net 存储库)?

最佳答案

您可以尝试使用 Entity Framework tracing providerdescribed here (但它是 CTP3 的旧帖子)。

您的其他选择是:

  • SQL Server Profiler - MS SQL Developer 工具的一部分(如果您的数据库是 SQL Server)
  • Intelli 跟踪 - 仅在 VS 2010 Ultimate 中,但不显示参数值
  • Hugati Query Profiler
  • Entity framework profiler

  • 在常见的 EF 中,您也可以使用 ToTraceString正如@Andy 建议的那样,但 DbQuery在 CodeFirst 中没有这个方法(或者我没有找到)。

    编辑:

    所以DbQuery没有 ToTraceString因为它是 directly implementedToString .

    关于sql - 使用 Entity Framework CTP 5 "code only"时,如何获取 LINQ 查询背后的原始 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153776/

    相关文章:

    sql - 我可以在 Pentaho Report Designer 的查询中使用用户定义的数据库函数吗?

    Java JAR 内存使用 VS 类文件内存使用

    android - 如何识别 Android 中的内存泄漏?

    sql - 使用 Ecto 的相关子查询

    mysql - 基于绝对引用创建新列

    sql - 是否可以从 SQL 查询执行文本文件?

    linq - Entity Framework dbset 最有效的删除方式

    entity-framework - EF 4 中 "include foreign key columns in the model"选项的优缺点是什么

    c# - 从单独的列在 Entity Framework 中添加日期时间和时间

    java - 为什么 VisualVM 中的 CPU 时间不加起来?