1

我有一個Visual Studio解決方案與四個實體框架代碼優先項目。我經常將項目部署到多個環境,因此使用多個連接字符串。實體框架批量更新數據庫連接字符串

所以,如果我需要更新我的所有環境我的項目之一如下:

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:s自動更新數據庫,使用這樣的初始化程序Database.SetInitializer(new DropCreateDatabaseAlways<DbContext>());。我不介意有一個GUI,只是指出哪個連接字符串用於哪個項目,因爲它現在有很多複製和粘貼,但最好是有一個Update-Database-All命令,用於運行所有)

+1

你正在部署一個Web應用程序嗎? Web.config設置可以作爲過程的一部分進行更改http://msdn.microsoft.com/en-us/library/dd394698(v=vs.100).aspx – Colin

+0

嗯是的,但我希望能夠分開部署數據庫和Web文件。 – cederlof

+0

這不會破壞應用程序嗎? – Colin

回答

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 

安裝包到您的項目,並從包管理器調用更新所有-DB命令安慰。

相關問題