Nic*_*ell 13 c# entity-framework-migrations asp.net-core-6.0 .net-6.0 ef-core-6.0
我已经使用 .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
小智 3
我也遇到了这个问题。我使用带有完整控制器的 ASP.Net Core 6 WebApi。
我看到了March 对 GitHub 问题的评论(Migrations script not using IDesignTimeDbContextFactory),这给了我灵感。
因此,我将其更改WebHost.CreateDefaultBuilder(args)为 Program.cs(在 .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.
Run Code Online (Sandbox Code Playgroud)