Asp.net-Core
Asp.Net core 2.0:檢測從遷移或其他 ef 操作呼叫的啟動類
目前,所有
Startup.cs與 db 相關的操作(如刪除 db、添加遷移、將 db 更新到遷移等)上執行的所有預設流程。我有大量的應用程序特定程式碼,
Startup只有在應用程序真正執行時才需要呼叫這些程式碼。那麼我如何檢測Startup從遷移或其他與數據庫相關的dotnet命令執行的類。
好吧,正如在對問題的評論中已經註意到的那樣,有一個
IDesignTimeDbContextFactory介面需要DbContext在設計時實現才能解決。它可能看起來像這樣:
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,即使它是私有的——這就是為什麼每次都為問題的作者執行標準流程的原因。解決方法 -重命名 **Programm.BuildWebHost**為其他名稱,例如InitWebHost為此創建了一個問題,所以也許它會在未來的 2.1 版本中得到解決。