Существует нет встроенного способа генерации сценариев DML для изменений до вызова метода SaveChanges()
, но можно перехватить команды insert/update/delete, поскольку они отправляются в БД после того, как SaveChanges()
был называется.
EF 6 представила две точки расширяемости для таких сценариев.
Позволяет установить свойство _objDataContext.Database.Log
как TextWriter
, где будут регистрироваться все SQL-команды, выпущенные контекстом.
Другой вариант - использовать перехватчик, который вызывается EF, когда он собирается выполнить команду или после выполнения команды. Перехватчики позволяют вам регистрировать отправляемую команду SQL и даже обеспечивать способ подавления выполнения команды.
Для создания перехватчика вам необходимо написать класс, который реализует интерфейс IDbCommandInterceptor
и зарегистрировать этот класс в Entity Framework.
DbInterception.Add(new MyInterceptor());
Для получения более подробной информации вы можете найти sample implementation on MSDN.
Решение для старых версий Entity Framework может быть поставщиком пакетов вокруг вашего текущего поставщика баз данных.
Это именно то, что я искал! также может помочь другим: StringBuilder sb = new StringBuilder(); dbContext.Database.Log = s => sb.AppendLine (s); – SubqueryCrunch