为什么 "dotnet ef migrations add" 启动我的应用程序?

Why does "dotnet ef migrations add" start my application?

我使用 .NET 6 和 EF Core 6 创建了一个新项目,但是当我尝试使用 dotnet ef migrations add 创建迁移时,CLI 在“构建成功”后开始 运行 连接应用程序.".

这不会阻止创建迁移,但会增加该过程的大量时间,因为我需要等待应用程序退出才能发出任何其他命令。

dotnet ef 迁移的片段添加输出:

在同一个解决方案中,我有许多其他使用 .NET 5 和 EF Core 5 的项目,它们都按预期创建迁移(只是构建项目,而不是 运行 它)。

这是 EF Core 6 的新功能还是某处存在会导致此行为的配置?

编辑

问题似乎是 EF Core 在迁移创建期间忽略了 IDesignTimeDbContext 工厂的实现,而是默认从主机构建器获取 DbContext 的实例。显然也可能发生在 EF Core 5 上。

dotnet/efcore github 这里有一个未解决的问题:Migrations script not using IDesignTimeDbContextFactory

我也遇到了这个问题。我使用 ASP.Net Core 6 WebApi 和完整的控制器。

看到了march's comment on a GitHub issue (Migrations script not using IDesignTimeDbContextFactory),给了我灵感

所以,我在Program.cs中将WebHost.CreateDefaultBuilder(args)(在.NET6中已过时)更改为Host.CreateDefaultBuilder(args),现在问题解决了。不幸的是,我仍然不知道问题的具体原因。

“dotnet ef migrations add”仍会启动应用程序,但主机会抛出 StopTheHostException 以停止 ASP.NET 核心主机,然后会成功创建迁移相关文件,如

Build started...
Build succeeded.
[16:46:18 INF] Configuring web host (Identity.API)...
[16:46:18 FTL] Program terminated unexpectedly (Identity.API)!
Microsoft.Extensions.Hosting.HostFactoryResolver+HostingListener+StopTheHostException: Exception of type 'Microsoft.Extensions.Hosting.HostFactoryResolver+HostingListener+StopTheHostException' was thrown.
   at Microsoft.Extensions.Hosting.HostFactoryResolver.HostingListener.OnNext(KeyValuePair`2 value)
   at System.Diagnostics.DiagnosticListener.Write(String name, Object value)
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at Program.<<Main>$>g__CreateHostBuilder|0_0(IConfiguration configuration, String[] args) in G:\ASPNETCore\HongJieSun.Innermost\Services\Innermost.Identity\Innermost.Identity.API\Program.cs:line 47
   at Program.<Main>$(String[] args) in G:\ASPNETCore\HongJieSun.Innermost\Services\Innermost.Identity\Innermost.Identity.API\Program.cs:line 11
To undo this action, use Remove-Migration.