Asp.Net核心2.0:检测从迁移或其他ef操作调用的Startup类

sil*_*der 9 entity-framework-core .net-core asp.net-core .net-core-2.0

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

我有很多应用程序特定的代码,Startup只有当应用程序运行真实时才需要调用它.那么我如何检测Startup该类是从迁移还是其他与数据库相关的dotnet命令运行的.

Ph0*_*n1x 7

好吧,因为在评论问题时已经注意到有一个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

为此创建了一个问题,因此将来可能会在2.1版本中解决.