我有一个Visual Studio解决方案,包含四个Entity Framework Code First项目。我经常将项目部署到多个环境,因此使用多个连接字符串。
因此,如果我需要更新所有环境,我会为其中一个项目执行以下操作:
PM> Update-Database -Verbose -StartupProjectName "Sln.DataAccess1" -ConnectionStringName "DevContext"
PM> Update-Database -Verbose -StartupProjectName "Sln.DataAccess1" -ConnectionStringName "TestContext"
PM> Update-Database -Verbose -StartupProjectName "Sln.DataAccess1" -ConnectionStringName "DemoContext"
PM> Update-Database -Verbose -StartupProjectName "Sln.DataAccess1" -ConnectionStringName "StagingContext"
你可以想象Sln.DataAccess2,Sln.DataAccess3和Sln.DataAccess4的继续......
有更简单的方法吗?例如,同时运行所有?我还没有找到解决方案。
不,我不想使用EF:使用像Database.SetInitializer(new DropCreateDatabaseAlways<DbContext>());
这样的初始化程序自动更新数据库。
(我不介意拥有一个GUI,只是指出哪个连接字符串用于哪个项目,因为它现在有很多复制和粘贴。但最好的是拥有一个{{ 1}}命令,用于以某种方式同时运行所有。)
答案 0 :(得分:0)
我已经创建了一个自定义Nuget包,如Phil Haack在this帖子中所述。 init.ps1文件包含以下两行:
param($installPath, $toolsPath, $package)
Import-Module (Join-Path $toolsPath CodeFile1.psm1)
CodeFile1.psm1文件:
function update-all-db
{
Write-Host "Update all database contexts"
update-database -ConfigurationTypeName MyProject.Web.Migrations.IdentityDb.Configuration
update-database -ConfigurationTypeName MyProject.Web.Migrations.OtherDb.Configuration
}
Export-ModuleMember update-all-db
将软件包安装到项目中,并从软件包管理器控制台调用update-all-db命令。