Использование нескольких операторов SQL в миграции EF - как использовать GO для запуска в SSMS? - PullRequest
0 голосов
/ 26 апреля 2019

Я переименовываю некоторые столбцы, используя миграции EF6, и мне нужно обновить несколько функций, представлений и хранимых процедур, которые используют столбцы. Я хочу добавить их как отдельные Sql() вызовы в различные частные методы, чтобы облегчить чтение всей миграции.

Когда я это делаю, я могу без проблем запустить миграцию, используя update-database, но если я создаю сценарии (используя update-database -script), сценарий запускается не полностью, потому что 'ALTER FUNCTION' must be the first statement in a query batch..

Я пытался поставить GO в конце каждого оператора Sql(), но когда EF генерирует скрипт, он удаляет GO. Если я попробую с двумя из них (см. Ниже), EF выдаст ошибку The argument 'sql' cannot be null, empty or contain only white space.

ALTER FUNCTION myFunc
...
GO
GO

Я хочу иметь возможность запускать миграцию через EF или с помощью генерации скрипта, и для того, чтобы оба работали без необходимости изменять какую-либо конфигурацию или изменять скрипт вручную.

1 Ответ

0 голосов
/ 26 апреля 2019

Я нашел странное решение этой проблемы:

GO
--any arbitrary comment here
GO

Я предполагаю, что EF удалит GO с конца Sql() вызова:

Sql(@"
--actual SQL here
GO");

Включение произвольного комментария, по-видимому, означает, что удаляется только последний GO, но исходный сохраняется. Это работает для меня независимо от того, запускаю ли я миграцию через EF или генерирую скрипт для запуска в SSMS.

...