2015-10-21 4 views
1

Я работаю над инфраструктурой сущностей и хотел бы сгенерировать и вставить/обновить/удалить скрипт из объекта DbContext, когда изменения будут сохранены. На данный момент мне удалось получить сценарий DDL из контекста, используя следующий фрагмент.Сгенерировать сценарий данных из DbContext в сущности Framework

string str = ((IObjectContextAdapter)_objDataContext).ObjectContext.CreateDatabaseScript(); 

Есть ли способ генерировать сценарий для всех изменений?

ответ

2

Существует нет встроенного способа генерации сценариев 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 может быть поставщиком пакетов вокруг вашего текущего поставщика баз данных.

+0

Это именно то, что я искал! также может помочь другим: StringBuilder sb = new StringBuilder(); dbContext.Database.Log = s => sb.AppendLine (s); – SubqueryCrunch

Смежные вопросы