Журнал DbContext не перехватывает SaveChanges() Сгенерированный SQL

В статье " Операции ведения журнала и перехвата базы данных из MSDN" описывается использование свойства Log для ведения журнала SQL, включая SQL, сгенерированный SaveChanges() метод для EF6+.

Я пытаюсь перехватить все сгенерированные sql из моего класса Context, который наследует от DbContext. Перехват работает отлично для всего, кроме SQL, который генерируется методом SaveChanges().

Является ли DbContext.Database.Log правильным свойством для регистрации этого?

Есть ли другой способ войти в SQL, сгенерированный методом SaveChanges()?

using (Context c = new Context())
{
    //setup logging to debugger
    c.Database.Log = s => Debug.WriteLine(s);

    //generate query
    var query = c.SomeTable.Where(x => x.Abc == "A" && x.Zyx == "Z");

    //enumerate query - generated SQL is logged to debugger correctly
    var items = query.ToList();

    //modify entities
    items.ForEach(t => t.Timestamp = DateTime.Now);

    //get number of changed entities: Outputs "Number of Changed Entities: 3"
    var changedEntries = c.ChangeTracker.Entries().Where(e => e.State != EntityState.Unchanged);
    Debug.WriteLine("Number of Changed Entities: {0}", changedEntries.Count());

    //save changes - generated SQL is NOT logged to debugger
    c.SaveChanges();
}

ОБНОВИТЬ

Я выяснил, где проблема. Я использовал Context, который является производным от DBContext и который переопределил метод SaveChanges(). Внутри переопределенного метода он перенаправлял DbContext.Database.Log в построитель строк вместо отладчика.

1 ответ

Контекст, производный от DbContext, переопределял метод SaveChanges(). Внутри переопределенного метода он перенаправлял DbContext.Database.Log в построитель строк вместо отладчика.

Другие вопросы по тегам