添加迁移 - 已安装Entity Framework Core和Entity Framework 6

5

我有一个包含EF 6和entityframeworkcore的多项目解决方案。

在添加EF6项目之前,迁移工作正常。但是现在我无法使用迁移命令:add-migration 'anything'

已安装Entity Framework Core和Entity Framework 6。 Entity Framework Core工具正在运行。对于Entity Framework 6,请使用'EntityFramework\Add-Migration'。

对于带有EF6的项目,我可以使用以下方式添加迁移:EntityFramework\Add-Migration 'anthing_here',但是我无法使用此方式向带有EFCore的项目添加迁移。

有什么建议吗?


EntityFrameworkCore\Add-Migration anything 是什么意思? - Ivan Stoev
1
你可以尝试使用 dotnet core cli工具。只需指向项目文件夹,即可从外部命令窗口运行迁移。 - Nish26
1
如果你遇到了“dotnet-ef”不是一个命令的错误,那么你可能缺少.CSPROJ文件中的工具。你可以尝试使用dotnet ef add-migration命令。 - Adam Vincent
@AdamVincent 我也遇到了相同的错误,即 'dotnet-ef 不是一个命令',但添加工具后它会抛出错误:'DotnetCliTool' 不受项目支持。 - Shahrukh Ahmad
你是否正在开发一个 .NET Core 应用程序?你可以在 .NET Core 应用程序中使用 EF 6,但是据我所知,你无法在 .NET Framework 应用程序中使用 EF Core。 - Adam Vincent
我已经找到了解决方法,使用EF6卸载项目,然后清理、重建整个解决方案并添加迁移,它给了我相同的错误,但这次确实进行了迁移! - Shahrukh Ahmad
2个回答

10

我们的项目历时约20年,涵盖了从Web Forms到最新的.Net Core技术的一切。有时候会出现PackageManagerConsole使用EFCore,有时候会使用EF6,这种情况在运气好的时候发生。

我不喜欢像上面的答案那样使用前缀,所以我深入挖掘了一下。

如果您在PM> PackageManagerConsole中运行Get-Module命令,您应该可以获得活动模块的列表:

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             

问题在于,正如您所看到并且可能已经知道的那样,解决方案中同时使用了EntityFramework Core和6

您可以使用以下命令之一删除其中一个发生冲突的模块:

PM> Remove-Module <module-name-from-list>

我需要的是仅使用EFCore,所以我移除了EF6模块。
PM> Remove-Module EntityFramework6

然后,您可以使用无前缀的命令,例如:

PM> Add-Migration TestMigration

我与EF团队进行了有关讨论:https://github.com/dotnet/efcore/issues/27051


1
对于 Get-Modules 命令,加上一个“plus one”,但是当我移除 EntityFramework6 并重新打开 Visual Studio 时,它会重新出现在列表中。 - sabsab
1
感谢您的回答。但是当我重新打开我的VS时,我再次看到了这个问题。就像@sabsab所说的那样。 - Haydar Dehghan
@HaydarDehghan 我解决了这个问题... 它是一个引用旧的 ef 6 的 nuget 包。 - sabsab

7

对于 EF6:

EntityFramework\Add-Migration <MIGRATIONNAME>

对于 EF Core:

EntityFrameworkCore\Add-Migration <MIGRATIONNAME>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接