更新已部署的 Web 应用程序的数据库

Update database of a deployed web app

我正在使用 Entity Framework,我不得不添加一些迁移。现在我想更新客户的应用程序和数据库。

我考虑过使用 update-database -script -SourceMigration migrationName 命令,但它不起作用,因为我在我的一个迁移中创建了一个视图,它在 VS 控制台中给出了以下异常。

There is already an object named 'viewName' in the database.

好像migrate.exe也可以用,但我对它的功能不是很熟悉,我不想在客户的电脑上安装任何东西(因为访问受限)。

应用这些迁移的最佳方式是什么?我更喜欢用 SQL 脚本来做,但我无法摆脱那个例外。

视图的迁移代码:

public override void Up()
{
    string script = @"CREATE VIEW [dbo].[viewName]
                      AS
                         SELECT *
                         FROM dbo.existingTable
                         WHERE (subquery)";

    using (var db = new EFDbContext())
    {
        db.Database.ExecuteSqlCommand(script);
    }
}

public override void Down()
{
    var script = @"DROP VIEW [dbo].[viewName]";

    using (var db = new EFDbContext())
    {
        db.Database.ExecuteSqlCommand(script);
    }
}

添加视图的更好方法是在 UpDown 中使用 Sql,其中“Up”将更改应用于目标数据库,“Down”将更改还原:

public override void Up()
{
    Sql("EXEC ('CREATE View [dbo].[viewName] AS --etc"
}

public override void Down()
{

    Sql(@"IF  EXISTS (SELECT
                        *
                    FROM sys.views
                    WHERE object_id = OBJECT_ID(N'dbo.viewName'))
                    DROP VIEW dbo.viewName)")
}