C# 如何在引用程序集中的DbContext上触发更新数据库(NuGet包)

C# 如何在引用程序集中的DbContext上触发更新数据库(NuGet包),c#,entity-framework,entity-framework-6,dbcontext,C#,Entity Framework,Entity Framework 6,Dbcontext,使用PackageManager控制台,我可以运行类似于以下命令的命令 Update-Database -ProjectName: My.Project.Data 该命令在位于当前打开的解决方案中的项目My.project.Data中定义的MyDbContext上触发迁移。好 现在,项目My.project.Data与项目My.project.Mvc位于同一个解决方案中。问题是,My.Project.Mvc使用两个db上下文。一个是我们已经介绍过的,另一个是在projectCore.proje

使用PackageManager控制台,我可以运行类似于以下命令的命令

Update-Database -ProjectName: My.Project.Data
该命令在位于当前打开的解决方案中的项目
My.project.Data
中定义的
MyDbContext
上触发迁移。好

现在,项目
My.project.Data
与项目
My.project.Mvc
位于同一个解决方案中。问题是,
My.Project.Mvc
使用两个db上下文。一个是我们已经介绍过的,另一个是在project
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
的迁移。如果我尝试运行
更新数据库-ProjectName:Core.Project.Data
我会得到错误:

Get-Project : Project 'Core.Project.Data' is not found.

更新:改用migrate.exe不是一个选项。

当第一次由
启用Migration
启用迁移时,将向项目中添加一个
配置.cs
文件。如果此文件存在于
Core.Project.Data
,请告诉实体框架使用此配置:

Update-Database -ConfigurationTypeName Core.Project.Data.Migrations.Configuration -ProjectName Core.Project.Data
来自更新数据库的不支持dll

您可以从命令行执行EF迁移工具,或将其添加到VS菜单中以方便使用

migrate.exe Core.Project.Data.dll /startupConfigurationFile=Core.Project.Data.dll.config

或者将
/startupConfigurationFile
更改为
/connectionString=您的连接字符串

可能是您的Nuget软件包的问题@史蒂文·格林,谢谢你的链接。然而,我已经尝试重新启动电脑,清理解决方案,重建解决方案。。。所有这些都没有帮助谢谢,这是一个很好的观点(+1),但是我知道migrate.exe,我正在寻找一种方法来避免它。更新数据库要方便得多。我想你指的是
ConfigurationTypeName
(不是
Configuration
)选项,对吧?不幸的是,当命令试图在当前程序集中定位给定类型时,它无论如何都没有帮助…即使您将其与
-ProjectName
组合以指向另一个程序集?我编辑了我的答案…是的,当然,我已经尝试指定
-ProjectName
,但是在这种情况下,我遇到了问题中描述的错误消息。指定
-ConfigurationTypeName
很好,但首先需要能够找到项目。这就是更新数据库命令失败的原因。不再工作(我正在使用VS 2019和.NET Core 2.2):更新数据库:找不到与参数名称“ConfigurationTypeName”匹配的参数。对于新的.NET Core tools更新数据库命令,我们应该使用-context参数,但它仍然无法工作,因为它试图在当前程序集中而不是在引用的程序集中定位dbcontext。