使用连接字符串进行代码优先迁移

时间:2012-02-25 05:26:10

标签: ef-code-first code-first ef-migrations

所以我设法让Code First运行起来并且效果很好。

由于我仍在开发应用程序,因此数据库的结构尚未最终确定,因此我需要实现迁移。

我关注了Official Blog Post并获得了Update-Database命令。

但是,这只会更新数据库的SQLExpress版本。数据库的生产版本在Azure上,我在运行时指定连接字符串,因此Update-Database命令不起作用。

所以我的最后一个问题是:如何将自动迁移应用于在运行时指定连接字符串的生产数据库?

2 个答案:

答案 0 :(得分:51)

在包管理器控制台上输入:

Get-Help Update-Database

相关部分:

    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]

所以你可以做一个Update-Database -ConnectionStringName "MyConnectionString",它应该像魅力一样。

如果您设置了MigrateDatabaseToLatestVersion数据库初始化程序(通过Database.SetInitializer()),当您使用正确的连接字符串在生产环境中部署应用程序时,在第一次数据库访问时,它应该自动迁移数据库到最新版本。

我建议谨慎,始终备份。

更新

@Alexy Strakh最近的评论产生了另一个值得回答的论点。

使用Code First Migrations正确配置部署系统,给定2个ConnectionStrings。

  1. 使用默认密码
  2. 在web.config(prod和dev)中定义连接字符串
  3. 让您的应用程序的配置系统了解prod和dev连接配置,可选择构建单元测试以确保选择正确的* *
  4. 使用config file transformation并将其转换为具有生产值
  5. 的web.config
  6. 将您的包部署到生产(this should be the most cutting edge way
  7. 您不应该从开发框中与生产环境进行交互,但如果您真的需要这样做,那么请将其作为临时解决方案,并在需要时立即恢复。重做。

    另一个选择是简单地使用Web.Debug.config和Web.Release.config,并为主web.config提供一个中央模板(这是您在源代码管理中唯一检查的模板)。

    确保永远不要签入生产或个人开发密码(如果 有)。

    *您可以使用DEBUG符号来检查应用程序的运行方式。

答案 1 :(得分:6)

Why does Entity Framework's EF Migrations Add-Migration step require a database connection string?

我认为从长远来看,我认为解决方案的劳动强度较小。 好像您创建了一个具有相同名称的连接字符串

关于你的背景 :基部( “数据库名”)

连接字符串名称和初始目录与您指定的DBName匹配,并且您不需要每次都输入连接字符串名称。