1

有什么方法可以检测我的应用程序是否正在运行dotnet ef *或PowerShell选项?任何方式来检测EntityFramework核心是否在工具内运行?

我正在用Entity Framework Core创建一个多租户ASP.NET核心应用程序,并且我有逻辑来决定应该使用哪个连接字符串,但是如果我通过创建迁移或更新数据库,则不应运行命令行。我不能依靠检查是否存在HttpContext,因为我在配置期间也使用我的DbContext,我也不能使用其他命令行参数或环境变量。

编辑:找到一个方法,如果一个连接字符串已经配置,它的效果并不理想,但我可以用它来帮助我的具体使用情况:

optionsBuilder.Options.Extensions 
    .OfType<RelationalOptionsExtension>() 
    .FirstOrDefault()?.ConnectionString 

回答

1

如果你创建一个类型实现您的DbContext(或启动)项目中的IDbContextFactory<T>,工具将调用此项,而不是尝试从服务中获取您的DbContext或直接实例化它。

+0

我之前尝试过IDbContextFactory,但最终没有使用它,因为它不支持依赖注入。我需要使静态可访问的所有必要的服务和配置依赖关系,除非我失去了一些东西? –

+1

把它看作另一个'Main',你不能注入服务。通过调用'Startup.ConfigureServices()'来构建你的服务提供者,或者提出另一种可以调用的方法。 – bricelam

+0

完美!为没有IHostingEnvironment的'Startup'做了一个替代构造函数,然后我用'new ServiceCollection'调用'ConfigureServices'。 –

相关问题