sil*_*der 9 entity-framework-core .net-core asp.net-core .net-core-2.0
目前,所有默认Startup.cs流都在每个与数据库相关的操作上执行,例如删除数据库,添加迁移,更新数据库到迁移等.
我有很多应用程序特定的代码,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>();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,由于一些不明原因(我问微软的人,但他们没有向我解释这一点),dotnet目前每个操作都隐含地调用, Programm.BuildWebHost即使它是私有的 - 这就是每次为问题的作者执行标准流程的原因.解决方法 - 重命名 Programm.BuildWebHost为其他内容,例如InitWebHost
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |