我已经使用 .NET 6 和 EF Core 6 创建了一个新项目,但是当我尝试使用
dotnet ef migrations add
创建迁移时,CLI 在“构建成功”后开始运行应用程序。
这并不会阻止创建迁移,但会增加该过程的大量时间,因为我需要等待应用程序退出才能发出任何其他命令。
dotnet ef migrations
添加输出的片段:
在同一解决方案中,我还有许多其他使用 .NET 5 和 EF Core 5 的项目,它们都按预期创建迁移(仅构建项目,不运行它)。
这是 EF Core 6 的新功能还是某处的配置会导致此行为?
编辑
问题似乎是 EF Core 在迁移创建期间忽略了
IDesignTimeDbContext
工厂的实现,而是默认从主机构建器获取 DbContext
的实例。显然 EF Core 5 也会发生这种情况。
dotnet/efcore github 上有一个未解决的问题:Migrations 脚本不使用 IDesignTimeDbContextFactory
我也遇到这个问题了。我使用带有完整控制器的 ASP.Net Core 6 WebApi。
我看到march对GitHub问题的评论(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.