EF Core Add-Migration 和 Update-Database 以无提示方式失败(生成成功)

EF Core Add-Migration and Update-Database Fails Silently (Build succeeded)

提问人:Geo242 提问时间:11/2/2023 最后编辑:Geo242 更新时间:11/2/2023 访问量:81

问:

多年后,我最近又开始与 EF 合作,这可能是一个愚蠢的问题。

当我从包管理器控制台运行(和)并且我的实体中没有错误时,它工作正常。但是,如果我犯了一个错误,就会按预期失败,但它不会给我任何关于出了什么问题的反馈,并且每次构建都会成功。如何让 EF CLI 向我显示错误Add-MigrationUpdate-DatabaseAdd-Migration

在静默失败的情况下,我添加了代码来执行自动迁移,然后我可以在应用程序运行时看到异常,但我永远无法通过 CLI 看到错误。Update-Database

我正在使用一台有很多限制的公司笔记本电脑,所以我认为它要么与此有关,要么我只是配置错误,或者我做错了什么。

这就是它失败时的样子......

PM> Add-Migration SomeMigration
Build started...
Build succeeded.
PM>

这就是它成功时的样子

PM> Add-Migration SomeMigration
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
Add-Migration : Value does not fall within the expected range.
At line:1 char:1
+ Add-Migration SomeMigration
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [Add-Migration], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Add-Migration
 
PM>

我觉得有趣的是,当它显示错误时,它实际上有效!

更新

选择正确的项目不是问题。请不要建议这样做。如上所述,如果代码没有错误,则可以成功创建迁移。问题是在存在错误时显示错误。

C# 实体框架 ASP.NET-Core .NET-CORE

评论

0赞 Dave Cousineau 11/2/2023
某处应该有一个 -verbose 选项(语法因 CLI 与包管理器控制台而异)
0赞 Geo242 11/2/2023
很好的建议,但是是的,我已经用过了,这根本没有帮助。不显示错误。-verbose
0赞 Dave Cousineau 11/2/2023
另请注意,您可以使用(我认为)cmdlet 获取语法帮助。(或类似的东西;sry 无法确定,因为我是在命令行而不是包管理器控制台上使用的。Get-HelpGet-Help Add-Migrationdotnet ef
0赞 Geo242 11/2/2023
我也使用了具有相同结果的命令。其他命令窗口在尝试生成和创建迁移时弹出。弹出的窗口只是消失,没有错误。并且,原始命令窗口中不显示任何错误。dotnet ef
0赞 Dave Cousineau 11/2/2023
嗯,在命令行详细输出中应该显示构建输出本身。我不知道弹出窗口,这不是发生在我身上的事情。我会确保您拥有最新的工具(我认为最新的是 7.0.13)。您也可以尝试明显的错误选项,看看是否至少收到正常的错误消息。 在错误的目录中应该说没有找到项目,等等。dotnet ef asdf

答:

-1赞 Omid Moridi 11/2/2023 #1

您是否选择了正确的项目来运行?也就是说,指向 appsettings.json 文件中的数据库的项目。 在运行工具栏中,必须选择要运行的主项目,在“包管理器”部分中,必须选择包含 EF 的项目。

解决方案在用于迁移之前不得有任何生成错误

评论

0赞 Geo242 11/2/2023
是的,正如我所提到的,当我的代码中没有错误时,它会成功。我只是无法始终理解代码中的问题所在,因为我没有得到任何反馈。
0赞 Geo242 11/2/2023
但是,一个重要的信息可能是实体位于与存储库项目不同的项目中。我必须使用数据库上下文所在的存储库项目才能进行迁移。
0赞 Omid Moridi 11/2/2023
不重要!在“包管理器默认项目”组合框中,选择实体项目,然后从 VS Main 运行项目中选择具有 ConnectionString 数据的项目。
0赞 Geo242 11/2/2023
我认为这里忽略了这一点。选择正确的项目不是问题。我选择了正确的项目。当实体没有错误时,我可以毫无问题地使用。这是CLI应该显示错误的时候,它没有。Add-Migration
0赞 Omid Moridi 11/2/2023
目标项目“x”与迁移程序集“y”不匹配。更改目标项目或更改迁移程序集。使用 DbContextOptionsBuilder 更改迁移程序集。例如选项。UseSqlServer(连接, b => b.MigrationsAssembly(“yy”))。默认情况下,迁移程序集是包含 DbContext 的程序集。使用包管理器控制台的“默认项目”下拉列表,或从包含迁移项目的目录中执行“dotnet ef”,将目标项目更改为迁移项目。让我看看错误是什么!