在生产中使用Entity Framework(代码优先)迁移

dev*_*tal 63 .net entity-framework ef-code-first ef-migrations

我只是考虑将EF迁移用于我们的项目,特别是在发布之间的生产中执行模式更改.

我已经看到提到有一个API可以在运行时使用DbMigration该类执行这些迁移,但我找不到任何具体的示例.

理想情况下,我希望DbMigration每个数据库更改一个文件,并在应用程序启动时自动应用这些更改从当前版本到最新版本.

WDR*_*ust 76

您可以使用数据库初始化程序在启动时实现向最新版本的迁移(或者更好,dbinitializer将在第一次数据库访问时启动)MigrateDatabaseToLatestVersion,您可以使用它:

Database.SetInitializer<ObjectContext>(
    new MigrateDatabaseToLatestVersion<ObjectContext, Configuration>());
Run Code Online (Sandbox Code Playgroud)

关于每次迁移只有一个文件,如果启用自动迁移,您将在Migrations项目根目录中的文件夹中(默认情况下)找到它们.

相关信息,以及示例,请访问:http://weblogs.asp.net/fredriknormen/archive/2012/02/15/using-entity-framework-4-3-database-migration-for-any-project.aspx

  • 这段代码会添加到哪里?这可以包装在条件语句中以检查web.config文件中的应用程序设置吗?这样在开发过程中可以跳过这段代码?那么web.config转换会在发布发布版本时启用吗? (3认同)
  • 有关此问题的更多信息,请访问:https://msdn.microsoft.com/zh-cn/data/jj591621.aspx#initializer对于那些对自动迁移和数据库架构更新持谨慎态度的人,认为手动编辑脚本更安全...验证您是否有备份,为上帝着想,先对其进行测试!! (2认同)

mac*_*kie 48

这也有效:

var configuration = new MyDbContextConfiguration();
configuration.TargetDatabase = new DbConnectionInfo(
    database.ConnectionString, database.ProviderName);

var migrator = new DbMigrator(configuration);
migrator.Update();
Run Code Online (Sandbox Code Playgroud)

你也可以打电话:

migrator.GetPendingMigrations();
Run Code Online (Sandbox Code Playgroud)

获取需要应用的迁移列表.


Wor*_*hy7 6

由于您没有指定您正在使用的Visual Studio版本或数据库,因此我将在此处添加一个答案,说明在VS2015中使用Microsoft的SQL Server,现在使用"发布"工具非常容易.

您不需要为您所说的API烦恼.只需在本地完成工作,更改模型,应用迁移等,然后当您想要推出发布/测试服务器时,使用发布工具.

您可以选择在第一次启动应用程序时将您在本地进行的任何迁移应用于远程服务器.

完成所有迁移并在本地完成所有操作后(在Dev env中可以推荐)然后发布(右键单击项目,单击"发布..."勾选"执行代码优先迁移(在应用程序启动时运行)"复选框"设置"选项卡然后它将在第一次访问应用程序时应用迁移(因此第一次会有短暂的延迟).

使用Web-Deploy发布Web

指南:https: //msdn.microsoft.com/en-us/library/dd465337(v = vs.110).aspx

我学到了所有这些,因为我必须这样做到Windows 2012服务器:http: //www.sherweb.com/blog/how-to-install-webdeploy-on-windows-server-2012/

祝好运!