【发布时间】:2022-12-09 02:23:18
【问题描述】:
我正在使用 EF core 和 SQL Server 创建一个 .NET 6 API,并尝试实现多个数据库,这些数据库将基于从身份令牌传入的 id 来使用不同的连接字符串。本质上,会有多个数据库,每个数据库都包含相同的表,但存储不同的信息。用户将能够从前端编辑数据,并根据他们正在使用的“租户”,将数据存储在适当的数据库中。目前,所有数据库都将位于同一台服务器上。
当用户发出请求时,我已经能够正确地实现它,在我的 DbContext 中使用以下内容:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if(!optionsBuilder.IsConfigured)
{
var tenantId = _httpContext.GetClaim("tenantId");
optionsBuilder.UseSqlServer(GetClientConnectionString(tenantId));
}
}
GetClientConnectionString 函数将执行一些逻辑来操作默认连接字符串,并根据用户令牌中的 id 返回正确的值。这工作正常,当使用适当的令牌运行时,能够正常切换连接字符串。
我不确定的部分是如何单独维护每个数据库——是否有为每个数据库运行迁移的好方法?我知道可以将连接字符串传递给 dotnet ef migrations ... 命令,但是如果数据库数量增长到相当大的数量,这似乎效率不高。
硬着头皮手动执行迁移是最好的选择吗?或者是否有可能以某种方式循环遍历一组键,这些键将返回连接字符串值并将迁移应用于每个键?
我对 EF 中的简单数据集以外的任何东西都比较陌生,所以我希望我不仅仅是遗漏了一些东西。
提前致谢
【问题讨论】:
-
您的所有数据库都只使用一个后端吗?
-
是的,它只会是一个后端
标签: c# entity-framework-core .net-6.0