2

У нас есть несколько классов и миграций POCO, включенных для моего уровня данных, мы создали начальную миграцию в - примечание, мы используем инициализацию db CreateDatabaseIfNotExist.Изменение параметров базы данных во время миграции EF

Но в базе данных я хотел бы иметь поле MessageBody, которое использует SQL Filestream, потому что ограничение на EF для Filestream - мы пытаемся сделать это вручную в сценарии миграции.

Здесь мы выполняем следующую команду sql.

Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null"); 

Но я должен установить параметры FileStream Filestream options

Так что я хотел бы выполнить следующую команду во время/до миграции.

ALTER DATABASE CURRENT SET FILESTREAM (NON_TRANSACTED_ACCESS = FULL) 

Но при добавлении этого bedore создания таблиц я получаю ошибку: ALTER DATABASE заявления не допускается в транзакции несколько операторов.

Каков наилучший способ адаптации параметров базы данных, когда вы хотите создать базу данных автоматически? Можно ли перехватить процесс миграции для выполнения некоторого sql до того, как процесс выполнит acutal миграции?

+0

Вы используете это в методе Up() миграции? http://ignoringthevoices.blogspot.com/2014/01/working-with-entity-framework-code.html –

ответ

5

Чтобы исправить ошибку, произошедший вам нужно только вызвать метод Sql с дополнительным параметром BOOL значение ИСТИНА:

Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null", true); 

Это приведет к тому, что ваш запрос будет выполнен в отдельной транзакции.

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