【问题标题】:Why does "dotnet ef migrations add" start my application?为什么“dotnet ef migrations add”会启动我的应用程序?
【发布时间】:2022-07-19 18:22:14
【问题描述】:

我使用 .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

【问题讨论】:

  • 是的,抱歉,我使用的是 EF Core 6,我会更新问题
  • 你在NET6项目中使用minimal API吗?
  • @IvanStoev 不,我正在使用完整的控制器

标签: c# entity-framework-migrations .net-6.0 asp.net-core-6.0 ef-core-6.0


【解决方案1】:

我也遇到过这个问题。我使用带有完整控制器的 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 Core 主机,然后会成功创建迁移相关的文件,喜欢

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.

【讨论】:

  • 根据您的建议,我从 WebHost.CreateDefaultBuilder(args) 迁移到 WebApplication.CreateBuilder(args) 并看到了相同的结果。仍然有点奇怪,但比以前好多了,因为 Polly 重试浪费了很多时间。谢谢!
【解决方案2】:

我遇到了同样的问题。我使用具有最少 API 的 ASP.Net Core 6。 当我ef migrations Add ... 时,我得到以下异常:

[17:56:30::FTL::] Host terminated unexpectedly
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 Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build()
   at Program.<<Main>$>g__CreateApplication|0_4(<>c__DisplayClass0_0& ) in D:\workshop\cg\XunQinJi\xqj-admin-app\back-end\AdminApp\Program.cs:line 178
   at Program.<Main>$(String[] args) in D:\workshop\cg\XunQinJi\xqj-admin-app\back-end\AdminApp\Program.cs:line 206
Done. To undo this action, use 'ef migrations remove'

我有什么遗漏吗?我找不到任何解决方案。

【讨论】:

    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多