【问题标题】:Any way to detect if EntityFramework Core is run inside a tool?有什么方法可以检测 EntityFramework Core 是否在工具内运行?
【发布时间】:2017-01-28 07:35:02
【问题描述】:

有什么方法可以检测我的应用程序是通过 dotnet ef * 还是 PowerShell 替代方案运行的?

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

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

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

【问题讨论】:

    标签: entity-framework dependency-injection asp.net-core entity-framework-core


    【解决方案1】:

    如果您在 DbContext(或启动)项目中创建实现 IDbContextFactory&lt;T&gt; 的类型,工具将调用此方法,而不是尝试从服务中获取您的 DbContext 或直接实例化它。

    【讨论】:

    • 我之前尝试过 IDbContextFactory 但最终没有使用它,因为它不支持依赖注入。我需要静态访问所有必要的服务和配置依赖项,除非我遗漏了什么?
    • 像对待另一个Main 一样对待它,你不能在其中注入服务。通过调用Startup.ConfigureServices() 来构建您的服务提供者,或者考虑另一种两者都可以调用的方法。
    • 完美!为Startup 制作了一个没有IHostingEnvironment 的替代构造函数,然后我只是用new ServiceCollection 调用了ConfigureServices
    • 现在,在 EF3 中,它的名称是 IDesignTimeDbContextFactory
    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 2013-01-18
    • 2010-10-28
    • 2016-12-01
    • 2023-04-04
    • 2013-06-20
    • 1970-01-01
    相关资源
    最近更新 更多