所以我设法让 Code First 运行起来,而且效果很好。
由于我仍在开发应用程序,因此数据库的结构尚未最终确定,因此我需要实现迁移。
我关注了官方博客文章并让 Update-Database 命令正常工作。
但是,这只会更新数据库的 SQLExpress 版本。数据库的生产版本位于 Azure 上,我在运行时指定了连接字符串,因此 Update-Database 命令对此不起作用。
所以我的最后一个问题是:如何将自动迁移应用到在运行时指定连接字符串的生产数据库?
所以我设法让 Code First 运行起来,而且效果很好。
由于我仍在开发应用程序,因此数据库的结构尚未最终确定,因此我需要实现迁移。
我关注了官方博客文章并让 Update-Database 命令正常工作。
但是,这只会更新数据库的 SQLExpress 版本。数据库的生产版本位于 Azure 上,我在运行时指定了连接字符串,因此 Update-Database 命令对此不起作用。
所以我的最后一个问题是:如何将自动迁移应用到在运行时指定连接字符串的生产数据库?
在包管理器控制台上输入:
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 迁移正确配置部署系统。
您不应该从您的开发箱与生产环境进行交互,但如果您真的需要这样做,那么将其作为临时解决方案,一旦完成就需要恢复。
另一种选择是简单地使用 Web.Debug.config 和 Web.Release.config 并为主 web.config 提供一个中央模板(这将是您在源代码管理中签入的唯一模板)。
只要确保永远不要签入生产或个人开发密码(如果有的话)。
*您可以使用 DEBUG 符号来检查应用程序的运行情况。
为什么实体框架的 EF 迁移添加迁移步骤需要数据库连接字符串?
有一个解决方案,从长远来看,我认为它的劳动强度较低。就好像你创建了一个同名的连接字符串
在您的上下文中:base("DBName")
连接字符串名称和初始目录与您指定的 DBName 匹配,您无需每次都输入连接字符串名称。