使用Visual Studio Team Services发布的实体框架迁移

时间:2016-03-09 16:16:23

标签: asp.net-mvc visual-studio azure ms-release-management

我尝试使用Visual Studio Team Services构建/发布我的MVC应用程序到Azure。

我一直关注tutorials here

目前我可以将我的更改推送到存储库,然后触发构建,然后我可以手动选择要发布的版本,使用版本定义中的设置自定义web.config文件,并将站点推送到所需的插槽Azure Web App。

现在,我的问题在于数据库。从Visual Studio直接发布时,可以选择首先运行代码迁移。这会创建/更改表,然后运行种子方法。如果您只是将站点部署到一个Web应用程序,那就太棒了,但如果您要将它多次部署到不同的实例,那么这就好了,因此希望使用VS Team Services。

我看到在发布定义中有运行bacpac或sql文件的选项,但我想这需要为每个版本手动创建这些文件。

我确定我错过了什么。其他人如何在构建/发布中包含模型/数据库更改。

如果有人能告诉我应该如何做这件事会很好,因为在这方面似乎缺乏Microsoft文档。

1 个答案:

答案 0 :(得分:2)

您应该可以通过添加以下代码来启用数据库迁移:

在Startup.cs文件的Configuration方法中,在开头添加以下行:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DefaultContext, Configuration>());

此外,在Migrations / Configuration.cs文件中,确保将以下行添加到Configuration方法中:

AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true; //either way works

使用这些选项可以让我在过去运行数据库迁移。

另一种替代方法(取决于您运行的MVC版本)是设置web.config值并以这种方式手动运行迁移。我有一个较旧的项目,我将此代码放入Application Start:

中的Global.asax.cs文件中
        if (bool.Parse(ConfigurationManager.AppSettings["MigrateDatabaseToLatestVersion"]))
        {
            // Migrations to update the database.
            Database.SetInitializer<ApplicationDbContext>(null);
            var configuration = new Configuration();
            var migrator = new DbMigrator(configuration);

            migrator.Update();

            Log.Debug("Database migrations complete.");
        }