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

Dra*_*eer 37 code-first ef-code-first ef-migrations

所以我设法让Code First运行,它运行良好.

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

我关注了官方博客帖子并获得了Update-Database命令.

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

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

WDR*_*ust 52

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

Get-Help Update-Database

相关部分:

    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]
Run Code Online (Sandbox Code Playgroud)

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

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

我建议谨慎,始终备份.

更新

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

在给定2个ConnectionStrings的情况下,使用Code First Migrations正确配置部署系统.

  1. 使用默认密码在web.config(prod和dev)中定义连接字符串
  2. 让您的应用程序的配置系统了解prod和dev连接配置,可选择构建单元测试以确保选择正确的配置*
  3. 使用配置文件转换并将其转换为具有生产值的web.config
  4. 将您的包部署到生产中(这应该是最前沿的方式)

您不应该从开发框中与生产环境进行交互,但如果您确实需要这样做,那么请将其作为临时解决方案,一旦完成就需要立即恢复.

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

只需确保永远不要签入生产密码或个人开发密码(如果有的话).

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


P63*_*5uk 6

为什么Entity Framework的EF迁移添加迁移步骤需要数据库连接字符串?

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

在您的上下文中:base("DBName")

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