如何在引用程序集中的 DbContext 上触发更新数据库(NuGet 包)
Posted
技术标签:
【中文标题】如何在引用程序集中的 DbContext 上触发更新数据库(NuGet 包)【英文标题】:How to trigger Update-Database on a DbContext in a referenced assembly (NuGet package) 【发布时间】:2016-11-21 00:26:58 【问题描述】:使用包管理器控制台,我可以运行类似于以下命令的命令
Update-Database -ProjectName: My.Project.Data
该命令触发在位于当前打开的解决方案中的项目 My.Project.Data
中定义的 MyDbContext
上的迁移。很好。
现在My.Project.Data
项目与My.Project.Mvc
项目位于同一个解决方案中。问题是,My.Project.Mvc
使用了两个数据库上下文。一个我们已经介绍过,另一个在项目Core.Project.Data
中定义——这个构建为 NuGet 包,然后由My.Project.Mvc
引用。下图应该清楚了:
MySolution
├┬ My.Project.Mvc
│├─ references: My.Project.Data (in the same solution)
│└─ references: Core.Project.Data (NuGet)
└─ My.Project.Data [MyDbContext]
CoreSolution
└─ Core.Project.Data [CoreDbContext]
问题是,如何从MySolution
的包管理器控制台触发CoreDbContext
的迁移。如果我尝试运行 Update-Database -ProjectName: Core.Project.Data
我会收到错误:
Get-Project : Project 'Core.Project.Data' is not found.
更新:不能选择使用 migrate.exe。
【问题讨论】:
您的 Nuget 包可能有问题吗? github.com/NuGet/NuGetGallery/issues/2884 @SteveGreene,感谢链接。但是我尝试重新启动 PC,清理解决方案,重建解决方案......这些都没有帮助 【参考方案1】:从document更新数据库不支持dll。
您可以从命令行执行 EF 迁移工具,也可以将其添加到 VS 菜单中以方便使用。
migrate.exe Core.Project.Data.dll /startupConfigurationFile=Core.Project.Data.dll.config
或将/startupConfigurationFile
更改为/connectionString=your-connection-string
【讨论】:
谢谢,这很好 (+1),但是我知道 migrate.exe 并且我正在寻找一种方法来避免它。更新数据库更方便。【参考方案2】:当Enable-Migration
首次启用迁移时,Configuration.cs
文件将添加到项目中。如果 Core.Project.Data
存在此文件,请告诉 Entity Framework 使用此配置:
Update-Database -ConfigurationTypeName Core.Project.Data.Migrations.Configuration -ProjectName Core.Project.Data
【讨论】:
我猜你的意思是ConfigurationTypeName
(不是Configuration
)选项,对吧?不幸的是,它无论如何都无济于事,因为该命令试图在当前程序集中找到给定的类型...
即使你将它与-ProjectName
结合起来指向另一个程序集?我编辑了我的答案...
是的,当然,我已经尝试指定-ProjectName
,但在这种情况下,我遇到了问题中描述的错误消息。指定-ConfigurationTypeName
很好,但首先您需要能够找到该项目。这就是 Update-Database 命令失败的原因。
不再工作(我正在使用 VS 2019 和 .NET Core 2.2):更新数据库:找不到与参数名称“ConfigurationTypeName”匹配的参数。
对于新的 .NET Core 工具 update-database 命令,我们应该使用 -context 参数,但它仍然不起作用,因为它试图在当前程序集中而不是在引用的那个。以上是关于如何在引用程序集中的 DbContext 上触发更新数据库(NuGet 包)的主要内容,如果未能解决你的问题,请参考以下文章