Sha*_*mad 2 c# entity-framework entity-framework-core visual-studio-2017 entity-framework-migrations
我有一个包含多个项目的解决方案,其中一个使用 EF 6,另一个使用 entityframeworkcore。
在添加 EF6 项目之前,迁移工作正常,但现在我无法使用迁移命令: add-migration 'anything'
Entity Framework Core 和 Entity Framework 6 都已安装。Entity Framework Core 工具正在运行。对实体框架 6 使用“EntityFramework\Add-Migration”。
对于带有 EF6 的项目,我可以使用以下方式添加迁移:
EntityFramework\Add-Migration 'anthing_here',但我无法使用这种方式向带有 EFCore 的项目添加迁移。
有什么建议 ??
Kad*_*daj 10
我的项目也发生过同样的情况,该项目已有约 20 年的历史。
它拥有从Web Forms到最新的.Net Core技术的一切。取决于运气,我有时会得到那个PackageManagerConsole正在使用的EFCore有时EF6。
我不高兴我必须使用像上面答案所述的前缀,所以我更深入地挖掘。
Get-Module如果您在您的命令中运行命令,PM> PackageManagerConsole您应该获得活动模块的列表:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 6.4.4 EntityFramework6 {Add-EFDefaultConnectionFactory, Add-EFProvider, Add-Migration, Enable-Migrations...}
Script 5.0.10 EntityFrameworkCore {Add-Migration, Drop-Database, Enable-Migrations, Get-DbContext...}
Script 2.0.0.0 NuGet {Add-BindingRedirect, Find-Package, Get-Package, Get-Project...}
Script 0.0 profile
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这里的问题甚至可能知道EntityFramework Core and 6解决方案正在使用两者。
您可以使用以下命令删除冲突的模块之一:
PM> Remove-Module <module-name-from-list>
Run Code Online (Sandbox Code Playgroud)
我需要的是仅使用 EFCore,因此我删除了 EF6 模块,如下所示:
PM> Remove-Module EntityFramework6
Run Code Online (Sandbox Code Playgroud)
然后您可以使用不带前缀的命令,例如:
PM> Add-Migration TestMigration
Run Code Online (Sandbox Code Playgroud)
我与 EF 团队进行的相关讨论: https ://github.com/dotnet/efcore/issues/27051
小智 6
对于 EF6:
EntityFramework\Add-Migration <MIGRATIONNAME>
Run Code Online (Sandbox Code Playgroud)
对于 EF 核心:
EntityFrameworkCore\Add-Migration <MIGRATIONNAME>
Run Code Online (Sandbox Code Playgroud)