如何监控数据库往返

时间:2010-11-16 17:16:05

标签: .net sql-server entity-framework

我有一个使用Entity Framework查询SQL Server数据库的Web应用程序。我希望能够以编程方式了解在数据库上执行了多少次查询(往返)。我们的想法是记录这些信息,以便轻松检测出未包含关系并导致大量往返的错误。

有没有办法实现这个目标?我不介意该解决方案是否特定于SQL Server。

注意:我想以编程方式监控数据库,因此SQL Server Profiler等工具对我没用。我希望能够在请求结束时以及处理请求的代码中知道该请求执行了多少查询。

5 个答案:

答案 0 :(得分:2)

根据Craig Stuntz的建议,这是我的最终解决方案。

using(var database = new MyEntities())
{
    SqlConnection sqlConnection = null;

    var entityConnection = _database.Connection as EntityConnection;
    if (entityConnection != null)
    {
        sqlConnection = entityConnection.StoreConnection as SqlConnection;

        // Enable statistics
        sqlConnection.StatisticsEnabled = true;
    }

    // Access the database

    if (sqlConnection != null)
    {
        var statistics = sqlConnection.RetrieveStatistics();
        var selectCount = (long)statistics["SelectCount"];

        // Do something with the statistics
    }
}

答案 1 :(得分:1)

也许使用EFProf

答案 2 :(得分:1)

有几点想法:

  • 如果您使用T4模板生成实体上下文,则可以更改生成的代码以提供日志记录信息或任何您想要的内容。
  • 如果使用LinqPad连接到dll,则可以运行所需的任何方法,LinqPad将在SQL选项卡中捕获查询。

答案 3 :(得分:1)

您可以使用SQL连接的provider statistics feature

答案 4 :(得分:0)

我使用SQL Server 2008 Profiler以艰难的方式完成了这项工作,如果您在探查器中设置了正确的过滤器,您将只看到EF的调用。