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

时间:2015-09-19 03:51:37

标签: asp.net-mvc entity-framework ef-migrations

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

我考虑使用update-database -script -SourceMigration migrationName命令,但由于我在其中一次迁移中创建了一个视图,因此在VS控制台中给出了以下异常。

  

已有一个名为' viewName'的对象在数据库中。

似乎migrate.exe也可以使用,但我对其功能并不熟悉,我不想在客户的计算机上安装任何东西(因为访问受限)。< / p>

应用这些迁移的最佳方式是什么?我更喜欢使用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);
    }
}

1 个答案:

答案 0 :(得分:1)

添加视图的更好方法是在SqlUp中使用Down,其中'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)")
}