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'。 –

相關問題