43

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

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

我关注了官方博客文章并让 Update-Database 命令正常工作。

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

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

4

2 回答 2

58

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

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 最近的评论引发了另一个值得回答的论点。

给定 2 个 ConnectionString,使用 Code First 迁移正确配置部署系统。

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

您不应该从您的开发箱与生产环境进行交互,但如果您真的需要这样做,那么将其作为临时解决方案,一旦完成就需要恢复。

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

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

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

于 2012-02-25T18:01:53.643 回答
6

为什么实体框架的 EF 迁移添加迁移步骤需要数据库连接字符串?

有一个解决方案,从长远来看,我认为它的劳动强度较低。就好像你创建了一个同名的连接字符串

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

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

于 2013-01-11T09:58:18.123 回答