1

Так что моя проблема в том, что мне нужен цикл внутри сценария миграции, чтобы иметь возможность передавать данные в новое состояние. Однако это не похоже на то, что можно создать хранимую процедуру внутри инструкции Sql в сценарии миграции.MySql Сохраненная процедура/Петля внутри сценария миграции Entity Framework

Ниже приведет к синтаксической ошибке в «DELIMITER» -части высказывания:

public override void Up() 
{ 
    Sql(@" 
    DROP PROCEDURE IF EXISTS SomeProcedure(); 
    DELIMITER // 
    CREATE PROCEDURE SomeProcedure() 
    BEGIN 
     ... 
    END // 
    DELIMITER ; 
    CALL SomeProcedure(); 
    "); 
} 

Оператор работает нормально внутри MySql Workbench. Таким образом, это должен быть способ EF обрабатывать заявления, которые вызывают проблему.

Теперь мой вопрос: есть ли вообще способ создать Хранимую процедуру внутри сценария миграции?

Кажется, что DELIMITER вызывает синтаксическую ошибку, но невозможно создать хранимую процедуру без нее? (Я использую EF6)

Я попытался разбить Заявки без каких-либо успехов. И я попробовал разные разделители.

+0

Возможный дубликат [Alter хранимых процедур в БД миграции EF 6 Code First - как пройти через нуль по умолчанию для параметра] (https://stackoverflow.com/ вопросы/23517164/изменить сохраненную-процедуру-в-DB-миграцию-эф-6-кода первой, как к сквозному-NUL) – TravisO

ответ

0

Возможно создание хранимой процедуры с помощью метода CreateStoredProcedure.

CreateStoredProcedure(
     "dbo.Post_Insert", 
     p => new 
      { 
       Title = p.String(), 
       Text = p.String(), 
      }, 
     body: 
      @"INSERT [dbo].[Posts]([Title], [Text]) 
       VALUES (@Title, @Text) 

       DECLARE @Id int 
       SELECT @Id = [Id] 
       FROM [dbo].[Posts] 
       WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity() 

       SELECT t0.[Id] 
       FROM [dbo].[Posts] AS t0 
       WHERE @@ROWCOUNT > 0 AND t0.[Id] = @Id" 
    ); 

Больше информации здесь: http://community.sharpdevelop.net/blogs/mattward/archive/2013/12/23/EntityFramework6CodeFirstMigrations.aspx