Как отслеживать обращения к базе данных - PullRequest
3 голосов
/ 16 ноября 2010

У меня есть веб-приложение, которое использует Entity Framework для запроса базы данных SQL Server. Я хотел бы иметь возможность программно узнать, сколько запросов (обходов) было выполнено в базе данных. Идея состоит в том, чтобы регистрировать эту информацию, чтобы легко обнаруживать ошибки, когда отношения не были включены и вызывали много циклов.

Есть ли способ достичь этого? Я не против, если решение является специфическим для SQL Server.

Примечание: Я хочу контролировать базу данных программно , поэтому такие инструменты, как SQL Server Profiler, мне не нужны. Я хочу знать, в конце запроса и в коде, который обрабатывает запрос, сколько запросов было выполнено этим запросом.

Ответы [ 5 ]

2 голосов
/ 16 ноября 2010

Это мое окончательное решение, основанное на предложении Крейга Стунца.

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 голос
/ 16 ноября 2010

Можно использовать функцию статистики провайдера соединения SQL.

1 голос
/ 16 ноября 2010

Пара мыслей:

  • Если вы используете шаблоны T4 для создания контекста вашей сущности, вы можете изменить сгенерированный код, чтобы предоставить информацию для регистрации или что угодно.
  • Если вы подключаетесь к dll с помощью LinqPad, вы можете запускать любые методы, которые захотите, и LinqPad будет захватывать запросы на вкладке SQL.
1 голос
/ 16 ноября 2010

Может быть, использовать EFProf ?

0 голосов
/ 16 ноября 2010

Я сделал это нелегко, используя SQL Server 2008 Profiler, если вы установите правильные фильтры в профилировщике, вы увидите только вызовы, сделанные EF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...