如何首先使用实体​​框架代码部署到生产环境

时间:2013-07-04 07:20:01

标签: asp.net-mvc entity-framework deployment

从asp.net webforms切换到mvc和实体框架代码第一种方法我现在有一个问题。如何设置环境以部署到生产环境?

我正在使用Visual Studio 2012并部署Web部署包。本地我有SQL Express,在生产中我有SQL Server 2008。

我想要的是在我的电脑上本地开发测试,并不时使用Web部署包将我的解决方案部署到生产中。我不想在生产系统中运行迁移,而是想从visual studio生成脚本,然后我可以附加到生产SQL。

我试图:

  • 在开发中创建初始迁移。
  • 本地更新数据库
  • 生成脚本,update-database -script -sourcemigration:InitialCreate
  • 在生产中应用此脚本
  • 将应用程序部署到生产

这是正确的做法吗?那些将在本地运行的迁移,由于我的迁移代码,它们在部署时是否会生产?

在global.asax

Migrator.RunMigrations();

其中RunMigrations是自定义Migrator类中的静态方法,如此

public class Migrator
    {
        public static void RunMigrations()
        {
            var migrator = new Configuration();
            var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(migrator);
            if (dbMigrator.GetPendingMigrations().Any())
            {


                dbMigrator.Update();

            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您可以使用Web Setup Project(对于安装需要MSI自定义操作):

更新数据库的实际工作可以通过migrate.exe工具完成。为了使MSI包正确运行,结果证明是一个挑战。我首先在安装包中包含migrate.exe,以便将它与系统的程序集一起部署到bin目录。支持在Web安装项目中将exe文件作为自定义操作运行。很遗憾,除非将工作目录设置为bin目录,否则无法使migrate.exe工作。默认情况下,自定义操作的工作目录为c:\ windows \ system32。为了解决这个问题,我们使用了一个小的vb脚本。

http://coding.abel.nu/2012/04/update-database-msi-custom-action/

<强>更新

我找到thisthis以及this,也许有帮助。

答案 1 :(得分:0)

回滚所有迁移

  

update-database -TargetMigration:0

     

update-database -Script

https://cpratt.co/migrating-production-database-with-entity-framework-code-first/