gpt4 book ai didi

asp.net-core - Asp.Net 核心 2.0 : Detect Startup class invoked from migration or other ef operation

转载 作者:行者123 更新时间:2023-12-04 03:56:28 25 4
gpt4 key购买 nike

目前全部默认Startup.cs在每个与数据库相关的操作上执行的流程,例如删除数据库、添加迁移、将数据库更新到迁移等。

我在 Startup 中有大量应用程序特定代码只有在应用程序真正运行时才需要调用它。那么我怎么能检测到 Startup类从迁移或其他数据库相关 dotnet 运行命令。

最佳答案

好吧,正如在对问题的评论中已经注意到的那样,有一个 IDesignTimeDbContextFactory解决DbContext需要实现的接口(interface)在设计时。

它可能看起来像这样:

public static class Programm{
...
public static IWebHost BuildWebHostDuringGen(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<StartupGen>() // <--- I'm just using different Startup child there where could be less complex code
.UseDefaultServiceProvider(options => options.ValidateScopes = false).Build();
}
}

public class DbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{
public MyDbContex CreateDbContext(string[] args)
{
return Program.BuildWebHostDuringGen(args).Services.GetRequiredService<MyDbContext>();
}
}

但是,由于一些不清楚的原因(我问过微软的人,但他们没有向我解释) dotnet当前在每个操作上都隐式调用 Programm.BuildWebHost即使它是私有(private)的——这就是为什么每次都为问题的作者执行标准流程的原因。解决方法 - 重命名 Programm.BuildWebHost 到别的东西,比如 InitWebHost
有一个 issue created为此,也许它会在 future 的 2.1 版本中得到解决。

关于asp.net-core - Asp.Net 核心 2.0 : Detect Startup class invoked from migration or other ef operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com