我使用.Net Core
我有一个场景,我需要根据departmentId将连接字符串切换到具有相同架构的两个不同数据库。
我有一个名为Department1
的数据库,其中包含旧记录,管理层决定通过更新逗号分隔的切换设置{{1}来定期将各部门记录移至Department2
在我们的DepartmentToggle
数据库中。基本上,我们的ETL团队会将记录移动到新数据库,并在完成后更新此设置。长期计划是将这些数据库记录移至云端。这是这样做的第一步。
因此,如果切换设置Config
的值为DepartmentToggle
,则表示部门1,2,3记录位于"1,2,3"
。因此,我必须首先从Department2
数据库中读取DepartmentToggle
配置值,检查DepartmentId是否包含在切换中。如果是,则DepartmentContext必须使用Config
connectionString。以下是我的上下文类:
Department2
有什么建议吗?
答案 0 :(得分:0)
你可以通过以下方式完成。
public class DepartmentContext : DbContext
{
public DepartmentContext(
IDepartmentRequestContext deptRequestContext,
IConnectionSelector connSelector)
: base(connSelector.GetConnectionString(deptRequestContext.SelectedDepartament))
{
}
}
使用Scoped生存期注册(或PerRequest,具体取决于您的容器)创建DepartmentRequestContext类。然后,您可以创建一个中间件或请求处理程序,它将根据从Config Db加载的1,2,3设置SelectedDepartment值。由于SelectedDepartment位于Scoped实例中,因此在创建期间,您的Department上下文中将提供相同的值。
然后在ConnectionSelector中,您基本上会根据SelectedDepartment读取IOptions并检索相应的连接字符串。
这整个解决方案基于以下事实:应该在部门已知并在中间件中缓存之后创建DepartmentContext。