簡體   English   中英

有沒有辦法使用連接工廠設置實體框架核心 DbContext?

[英]Is there a way to set up an Entity Framework Core DbContext with a connection factory?

在針對 SQL 服務器創建 Entity Framework Core DbContext 時,您似乎有三個選項,提供一個連接字符串到 DbContextOptionsFactoryExtension 方法 UseSqlServer 的一個重載,一個 DbConnection 直接到另一個(大獎?對 - 等等),或者嘗試和 Z34D1F91FB2E514B8576FAB1A75A89A6B使用 DbContextFactory。

不過我想知道,如果您像我一樣在 DI 中配置了一個您希望 EfCore 使用的連接工廠怎么辦? 你怎么把它掛起來? 基本上我需要一些可以讓我注冊一些 class 的東西,我可以通過 DI 連接,或者至少一個 Func<IServiceProvider, IDbConnection> 甚至 Func<IServiceProvider, string> 以便我可以解析我的工廠並創建一個彈性連接或網絡上至少有 go 並獲取新的信用。

在雲解決方案中,您希望您的憑據在 KeyVault/Secrets Manager/您擁有什么 - 但每次訪問都需要花錢,因此您希望使用緩存的內容,直到您自動查詢憑據的那一天保險庫以獲得新的信用,然后再試一次。

如果 s#,t 擊中風扇並且數據庫已恢復(因為“恢復”意味着“現在已使用原始數據庫中的舊數據創建了一個新數據庫”),則同樣的事情。 所以無論哪種方式 - 你需要刷新你的配置,因為我在其他地方使用 Dapper,我已經有了這樣一個雲就緒連接工廠。 我也只想從實體框架中使用它。

基本上 - 我在 ConfigureServices 時不確定正確的連接字符串 - 所以我什至不能在這里創建一個連接。 我需要某種services.AddTransient<IDbConnectionThing>(sp => sp.GetService<CoolFactory>().CreateInstance()); 推遲獲得正確的連接字符串或理想情況下創建我已驗證可以正常工作的連接 - 到構造 IServiceProvider 實例時。

如果連接工廠的想法過於瘋狂和瘋狂,我對任何能讓我向保險庫索取新憑據的解決方法感到滿意,但我無法找到一種方法來執行異步操作並在注冊時返回新的連接字符串EF 連接字符串,沒有執行超級全局方法 sync-over-async,這意味着 David Fowler 會感覺到 Force 中的干擾。

文檔: https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.sqlserverdbcontextoptionsextensions.usesqlserver?view=efcore-5.0#Microsoft_EntityFrameworkCore_SqlServerDbContextOptionsExtensions_UseSqlServer_Microsoft_EntityFrameworkCore_DbContextOptionsBuilder_Infrastructure_Action_MicrosoftDbContextOptionsBuilder_Instruction_Action_MicrosoftDb

朱莉·勒曼回答了這個問題。

答案是:

  1. 創建一個繼承 DbConnectionInterceptor 的新 class,特別是覆蓋 ConnectionOpening/ConnectionOpeningAsync (我不應該使用同步版本,但我不希望這成為我發現我是否在某處搞砸的方式)。
  2. 在 Startup.cs 的 AddDbContext 部分注冊攔截器:
 services.AddSingleton<AConnectionInterceptor>();
 services.AddDbContext<ADbContext>((provider, options) =>
 {
    options.UseSqlServer(pointlessConnectionString);
    options.AddInterceptors(provider.GetRequiredService<AConnectionInterceptor>());
 });

我重構了工廠的內部結構,以便在現有連接上完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM