'Why does "dotnet ef migrations add" start my application?
I've created a new project using .NET 6 and EF Core 6 but when I try to create a migration using dotnet ef migrations add
, the CLI begins running the application after "Build succeeded.".
This isn't preventing the migrations from being created but adds a considerable amount of time to the process as I need to wait for the application to exit before issuing any other commands.
Snippet of dotnet ef migrations add output:
Within the same solution I have many other projects using .NET 5 and EF Core 5 which all create migrations as expected (just builds the project, doesn't run it).
Is this new functionality for EF Core 6 or is there a configuration somewhere which would cause this behaviour?
EDIT
It seems like the issue is EF Core ignoring implimentations of IDesignTimeDbContext factory during migration creation and instead defaults to obtaining an instance of the DbContext from the host builder. Apparently can also happen with EF Core 5.
There is an open issue on the dotnet/efcore github here: Migrations script not using IDesignTimeDbContextFactory
Solution 1:[1]
I also met this problem. I use ASP.Net Core 6 WebApi with full controllers.
I saw march's comment on a GitHub issue (Migrations script not using IDesignTimeDbContextFactory), which gave me inspiration.
So, I changed WebHost.CreateDefaultBuilder(args)
(obsolete in .NET6) to Host.CreateDefaultBuilder(args)
in Program.cs and now the problem is solved. Unfortunately, I still don't know the specific causes of the problem.
"dotnet ef migrations add" will still start application but Host will throw a StopTheHostException
to stop the ASP.NET Core Host and then will create migration related files successfully which likes
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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Cody Gray |