【发布时间】:2021-04-16 15:00:31
【问题描述】:
当针对 SQL Server 创建 Entity Framework Core DbContext 时,您似乎有三个选项,提供一个连接字符串到 DbContextOptionsFactoryExtension 方法 UseSqlServer 的一个重载,一个 DbConnection 直接到另一个(大奖?对 - 等等),或者尝试使用 DbContextFactory。
不过我想知道,如果您像我一样在 DI 中配置了一个您希望 EfCore 使用的连接工厂怎么办?你怎么把它挂起来?基本上我需要一些东西来让我注册一些我可以通过 DI 连接的类,或者至少一个 Func
在云解决方案中,您希望您的凭据在 KeyVault/Secrets Manager/您拥有什么 - 但每次访问都需要花钱,因此您希望使用缓存的内容,直到凭据被轮换到您所在的位置自动查询保险库以获取新的凭据,然后重试。
如果 s#!t 击中风扇并且数据库已恢复(因为“恢复”意味着“现在已使用原始数据库中的旧数据创建了一个新数据库”),那么无论哪种方式 - 你需要刷新你的配置。由于我在其他地方使用 Dapper,我已经有了这样一个云就绪的连接工厂,我也想在实体框架中使用它。
基本上 - 在 ConfigureServices 时,我不确定正确的连接字符串 - 所以我什至不能在这里创建连接。我需要某种services.AddTransient<IDbConnectionThing>(sp => sp.GetService<CoolFactory>().CreateInstance()); 来推迟获得正确的连接字符串,或者在理想情况下创建一个我已经验证可以正常工作的连接 - 到构造 IServiceProvider 实例时。
如果连接工厂的想法过于疯狂和疯狂,我对任何可以让我向保险库索取新凭据的解决方法感到满意,但我无法找到一种方法来执行异步操作并返回新连接注册 EF 连接字符串时的字符串,没有执行超级全局方法 sync-over-async,这意味着 David Fowler 会感觉到 Force 中的干扰。
【问题讨论】:
标签: c# async-await entity-framework-core