Entity framework 有没有办法检测EntityFramework核心是否在工具中运行?

Entity framework 有没有办法检测EntityFramework核心是否在工具中运行?,entity-framework,dependency-injection,asp.net-core,entity-framework-core,Entity Framework,Dependency Injection,Asp.net Core,Entity Framework Core,有没有办法检测我的应用程序是通过dotnet ef*还是PowerShell替代品运行的 我正在使用Entity Framework Core创建一个多租户ASP.NET Core应用程序,我有逻辑来决定应该使用哪个连接字符串,但如果我正在创建迁移或通过命令行更新数据库,则不应该运行该连接字符串。我不能依赖于检查是否存在HttpContext,因为我在配置期间也使用了DbContext,也不能使用其他命令行参数或环境变量 编辑:找到了一种查看连接字符串是否已配置的方法,这并不理想,但我可以使用它

有没有办法检测我的应用程序是通过
dotnet ef*
还是PowerShell替代品运行的

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

编辑:找到了一种查看连接字符串是否已配置的方法,这并不理想,但我可以使用它来帮助处理我的特定用例:

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

如果您在
DbContext
(或启动)项目中创建了实现
IDbContextFactory
的类型,这些工具将调用它,而不是尝试从服务获取您的
DbContext
,或者直接实例化它。

我以前尝试过IDbContextFactory,但最终没有使用它,因为它不支持依赖项注入。我需要使所有必要的服务和配置依赖项都可以静态访问,除非我遗漏了什么?将其视为另一个
Main
无法注入服务的地方。通过调用
Startup.ConfigureServices()
构建您的服务提供商,或者找出另一个两者都可以调用的方法。完美!在没有
IHostingEnvironment
的情况下为
Startup
创建了一个替代构造函数,然后我用
new ServiceCollection
调用了
ConfigureServices
。现在,在EF3中,它的名称是IDesignTimeDbContextFactory