【问题标题】:Entity Framework batch Update-Database with connection string带有连接字符串的实体框架批量更新数据库
【发布时间】:2013-11-21 10:31:32
【问题描述】:

我有一个包含四个实体框架代码优先项目的 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 命令,用于运行以某种方式同时发生。)

【问题讨论】:

  • 您正在部署 Web 应用程序吗? Web.config 设置可以作为进程的一部分进行更改msdn.microsoft.com/en-us/library/dd394698(v=vs.100).aspx
  • 嗯,是的,但我希望能够分别部署数据库和 Web 文件。
  • 这不会破坏应用程序吗?
  • 通常我们只是更改种子数据或一些简单的东西 - 我们不想启动整个发布 Web 流程(我们通过 TFS 构建+部署)。我仍然想“感觉”我可以分别控制数据库和网络应用程序:)

标签: .net entity-framework visual-studio-2012 ef-code-first nuget


【解决方案1】:

我创建了一个自定义 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 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多