Я хочу регистрировать запросы Entity Framework в моем окне отладки. Я мог бы сделать это с помощью следующей строки:

myContext.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

Но как я могу сделать это для всех моих запросов в разных функциях и в разных файлах?

Мне нужно везде писать эту строчку?

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

Как и предполагалось, я написал код в конструкторе контекста, но он не работает.

public partial class EkartEntities : DbContext
{
    public EkartEntities() : base("name=EkartEntities")
    {
        Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
    }
}

Я делаю что-то не так?

Кроме того, это не дубликат Как сделать глобальные запросы sql журнала EF? поскольку сообщение содержит ответ подхода Code-First, в котором мы можем просто изменить наш конструктор.

5
Suyash Gupta 13 Сен 2018 в 07:45

2 ответа

Лучший ответ

Вы можете установить глобальный регистратор, добавив следующий класс в проект, содержащий ваш производный класс DbContext:

class MyDbConfiguration : System.Data.Entity.DbConfiguration
{
    public MyDbConfiguration()
    {
        AddInterceptor(new System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter(
            s => System.Diagnostics.Debug.WriteLine(s)));
    }
}

Класс представляет так называемую конфигурацию на основе кода и в данном конкретном случае используется для автоматической регистрации DatabaseLogFormatter с указанными Action<string> для всех DbContext производных типов и экземпляров в проекте, который его содержит.

2
Ivan Stoev 13 Сен 2018 в 18:21

Я думаю, что лучше использовать SQL Server Profiler для сбора всех запросов к базе данных.

Если вы разрабатываете локально, SQL Profiler идеально подойдет вам.

Профилировщик может захватывать любые типы запросов Linq или Raw SQL.

-2
Vinh Duong 13 Сен 2018 в 08:52