所以我设法让Code First运行起来并且效果很好。
由于我仍在开发应用程序,因此数据库的结构尚未最终确定,因此我需要实现迁移。
我关注了Official Blog Post并获得了Update-Database命令。
但是,这只会更新数据库的SQLExpress版本。数据库的生产版本在Azure上,我在运行时指定连接字符串,因此Update-Database命令不起作用。
所以我的最后一个问题是:如何将自动迁移应用于在运行时指定连接字符串的生产数据库?
答案 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。
您不应该从开发框中与生产环境进行交互,但如果您真的需要这样做,那么请将其作为临时解决方案,并在需要时立即恢复。重做。
另一个选择是简单地使用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匹配,并且您不需要每次都输入连接字符串名称。