Подтвердить что ты не робот

Первые миграция и хранимые процедуры кода

Я только что создал базу данных и выполнил первую миграцию (просто добавьте таблицу). Теперь я хочу добавить некоторые хранимые процедуры, которые я только что добавил, написав sql и выполнив его в Management Studio. Но я хотел бы включить эти хранимые процедуры, если это возможно, в перенос, чтобы они были сохранены, и я могу запустить против них метод Up или Down. Возможно ли это, и если да, то какой синтаксис нужно использовать? Или мне просто нужно добавить/отредактировать/удалить их с помощью Management Studio?

4b9b3361

Ответ 1

Я сделал это так...

В текущем классе миграции

public partial class MyMigration : DbMigration
{
    public override void Up()
    {
        ... other table creation logic

        // This command executes the SQL you have written
        // to create the stored procedures
        Sql(InstallScript);

        // or, to alter stored procedures
        Sql(AlterScript);
    }

    public override void Down()
    {
        ... other table removal logic

        // This command executes the SQL you have written
        // to drop the stored procedures
        Sql(UninstallScript);

        // or, to rollback stored procedures
        Sql(RollbackScript);
    }

    private const string InstallScript = @"
        CREATE PROCEDURE [dbo].[MyProcedure]
        ... SP logic here ...
    ";

    private const string UninstallScript = @"
        DROP PROCEDURE [dbo].[MyProcedure];
    ";

    // or for alters
    private const string AlterScript = @"
        ALTER PROCEDURE [dbo].[AnotherProcedure]
        ... Newer SP logic here ...
    ";

    private const string RollbackScript = @"
        ALTER PROCEDURE [dbo].[AnotherProcedure]
        ... Previous / Old SP logic here ...
    ";
}

Ответ 2

Я использую EF6, а класс DbMigration предоставляет методы для создания/изменения/удаления хранимых процедур

  • Создайте новую хранимую процедуру

    public partial class MyFirstMigration : DbMigration
    {
        public override void Up()
        {
            // Create a new store procedure
            CreateStoredProcedure("dbo.DequeueMessages"
            // These are stored procedure parameters
            , c => new{                
                MessageCount = c.Int()
            },
            // Here is the stored procedure body
            @"
            SET NOCOUNT ON;
            SELECT TOP (@MessageCount)
                *
            FROM
                dbo.MyTable;
            ");
        }
    
        public override void Down()
        {
            // Delete the stored procedure
            DropStoredProcedure("dbo.DequeueMessages");                
        }
    }
    
  • Изменить хранимую процедуру

    public partial class MySecondMigration : DbMigration
    {
        public override void Up()
        {
            // Modify an existing stored procedure
            AlterStoredProcedure("dbo.DequeueMessages"
            // These are new stored procedure parameters
            , c => new{                
                MessageCount = c.Int(),
                StatusId = c.Int()
            },
            // Here is the new stored procedure body
            @"
            SET NOCOUNT ON;
            SELECT TOP (@MessageCount)
                *
            FROM
                dbo.MyTable
            WHERE
                StatusId = @StatusId;
            ");
        }
    
        public override void Down()
        {
            // Rollback to the previous stored procedure
            // Modify an existing stored procedure
            AlterStoredProcedure("dbo.DequeueMessages"
            // These are old stored procedure parameters
            , c => new{                
                MessageCount = c.Int()
            },
            // Here is the old stored procedure body
            @"
            SET NOCOUNT ON;
            SELECT TOP (@MessageCount)
                *
            FROM
                dbo.MyTable;
            ");              
        }
    }