Entity Framework 6 - запросы времени

Йогеш

Я использую Entity Framework 6, и это потрясающие функции перехватчика базы данных для регистрации запросов, которые отправляются из приложения в базу данных. Однако я изо всех сил пытаюсь рассчитать время для этих запросов, у меня есть длительный запрос, который возвращает от сотен тысяч до миллионов строк, поэтому он занимает от 6 до 15 секунд в зависимости от объема данных, которые этот запрос собирается вернуть. Entity framework возвращает SqlDataReader, из-за чего я не могу узнать точное время, необходимое для получения результата. Я хочу знать полное время выполнения с момента отправки запроса до времени чтения последней строки. Есть способ сделать это.

Джонатан Аллен

Вот регистратор, который я обычно использую для EF.

public class EFLoggerForTesting : IDbCommandInterceptor
{
    static readonly ConcurrentDictionary<DbCommand, DateTime> m_StartTime = new ConcurrentDictionary<DbCommand, DateTime>();

    public void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        Log(command, interceptionContext);
    }

    public void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        Log(command, interceptionContext);
    }

    public void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        Log(command, interceptionContext);
    }

    private static void Log<T>(DbCommand command, DbCommandInterceptionContext<T> interceptionContext)
    {
        DateTime startTime;
        TimeSpan duration;


        if (m_StartTime.TryRemove(command, out startTime))
        {
            duration = DateTime.Now - startTime;
        }
        else
            duration = TimeSpan.Zero;

        var requestId =-1;
        string message;

        var parameters = new StringBuilder();
        foreach (DbParameter param in command.Parameters)
        {
            parameters.AppendLine(param.ParameterName + " " + param.DbType + " = " + param.Value);
        }

        if (interceptionContext.Exception == null)
        {
            message = string.Format("Database call took {0} sec. RequestId {1} \r\nCommand:\r\n{2}", duration.TotalSeconds.ToString("N3"), requestId, parameters.ToString() + command.CommandText);
        }
        else
        {
            message = string.Format("EF Database call failed after {0} sec. RequestId {1} \r\nCommand:\r\n{2}\r\nError:{3} ", duration.TotalSeconds.ToString("N3"), requestId, parameters.ToString() + command.CommandText, interceptionContext.Exception);
        }

        Debug.WriteLine(message);
    }


    public void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        OnStart(command);
    }

    public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
    {
        OnStart(command);
    }

    public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        OnStart(command);
    }
    private static void OnStart(DbCommand command)
    {
        m_StartTime.TryAdd(command, DateTime.Now);
    }
}

К сожалению, документации не существует, поэтому я не знаю, сработает ли это для вашего сценария.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Entity Framework 6 поиск по таблице с внешним ключом

Как сохранить объект в виде строки в базе данных, используя сначала код Entity Framework 6

Упростите синтаксис для Entity Framework 6 однозначной связи

Запрос Entity Framework 6 с фильтром Distinct

Entity Framework 6 DBContext только с подмножеством всех таблиц

Entity Framework 6 Код сначала значение по умолчанию, переопределяющее MigrationCodeGenerator

Не удается получить результаты хранимой процедуры с Entity Framework 6

Как получить выходной параметр из хранимой процедуры с помощью Entity Framework 6

Могу ли я использовать Entity Framework версии 6 или 7 для автоматического обновления объекта и его дочерних элементов?

Будущее Entity Framework 6 генерирует повторяющиеся запросы

Entity Framework 6, проверка не работает должным образом

Entity Framework 6 глубокая копия / клон сущности с динамической глубиной

Как применить каскадное удаление к объектам, которые имеют несколько внешних ключей с Entity Framework 6?

Пропустить идентификационный номер в первом семени кода Entity Framework 6

Вставка отключенных связанных объектов с помощью Entity Framework 6

Entity Framework 6 асинхронные операции и TranscationScope

Производительность запросов Entity Framework 6 (отношение MM)

Обновление Entity Framework 6, в котором внешний ключ ссылается на NULL

Совместное использование соединения между объектами DbContext в Entity Framework 6, первый подход к базе данных

Entity Framework 6 неправильно отображает мои столбцы с помощью атрибутов

Сложный подзапрос в Entity Framework 6

Entity Framework 6 Скомпилированный запрос LINQ

Entity Framework 6: динамическое построение предложения поиска по базе данных

Entity Framework 6 десятичная точность

Моя база данных не создается автоматически с помощью подхода Entity Framework 6, ориентированного на код?

Ограничение доступа пользователя только к его / ее сущностям В Entity framework6 Шаблон репозитория

Entity Framework 6 обновляет таблицу и вставляет в таблицы, связанные с внешним ключом

Как я могу сопоставить одно свойство как часть нескольких составных внешних ключей с помощью Entity Framework 6?

Entity Framework 6 программно подключайтесь к Postgres

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Как не использовать HttpClient с ЛЮБЫМ сертификата SSL, независимо от того, как «плохо» это

  3. 3

    Modbus Python Schneider PM5300

  4. 4

    (fields.E300) Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной.

  5. 5

    Elasticsearch - Нечеткий поиск не дает предложения

  6. 6

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  7. 7

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  8. 8

    Merging legends in plotly subplot

  9. 9

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  10. 10

    Автозаполнение с Java, Redis, Elastic Search, Монго

  11. 11

    Vue js CLI 2 импортирует и использует плагин javascript

  12. 12

    Метод ошибки Illuminate \\ Database \\ Eloquent \\ Collection :: save не существует. в Laravel

  13. 13

    Single legend for Plotly subplot for line plots created from two data frames in R

  14. 14

    В чем разница между CRC-16 / CCITT-FALSE и CRC-16 / X-25?

  15. 15

    Ленивое объединение FPU в Cortex-M4F

  16. 16

    Как очистить или очистить StringBuilder?

  17. 17

    PyQt5 не работает как «подходящий UI Toolkit» для Mayavi с Python 3.6.

  18. 18

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  19. 19

    Vue 2 / Vue CLI 3: создание асинхронных однофайловых компонентов

  20. 20

    Текущая ветка не настроена для извлечения В конфигурации не найдено значение для ключа branch.master.merge

  21. 21

    Проблемы со сборкой Python Image Registration Toolkit

популярныйтег

файл