mongodb - .NET 核心项目中的 Mongodb 多租户
问题描述
我正在使用 .NET Core 和 MongoDB。目前它是一个单一的数据库项目。现在我想在我的项目中实现多租户。那是针对不同用户的单独数据库。当用户登录站点时,并基于该用户详细信息,想要选择连接字符串。
https://web.archive.org/web/20140812091703/
http://support.mongohq.com/use-cases/multi-tenant.html
https://gunnarpeipman.com/aspnet/tenant-providers/
但问题是我不知道如何在我现有的代码中实现这一点?
我现有的代码是
public MetaphorsContext(IMongoClient client,
IMongoDatabase database)
{
_client = client;
_database = database;
}
public IMongoCollection<Location> Locations
{
get ???
}
解决方案
如果您的方法涉及同一集群中的不同数据库,那么您不需要不同的连接字符串,而只需要一个将每个租户 ID 映射到其各自的字典MongoDatabase
:
public IDictionary<string, IMongoDatabase> Databases = ...
string tenantID = ...
Databases.TryGetValue(tenantID, out var database);
// use database to get collections
如果不同的数据库保存在不同的集群中,那么您可以拥有一个字典,将每个租户 ID 映射到其各自的MongoClient
.
public IDictionary<string, IMongoClient> Clients = ...
string tenantID = ...
Clients.TryGetValue(tenantID, out var client);
// use client's databases and their collections
推荐阅读
- sql - 案例表达失败
- python - Keras CNN TypeError:float() 参数必须是字符串或数字,而不是“NoneType”
- java - 如何添加到main中的数组?
- python - 在本地运行 Python Azure 函数的 VSCode 失败并出现 ModuleNotFoundError
- php - Laravel Excel 导出 - 类型错误:传递给 Maatwebsite\Excel\Excel::download() 的参数 2 必须是字符串类型
- react-native - react-fetch-blob 使用 downloadManager 时不会调用进度
- c# - 您必须从 Disposed 订阅吗?
- javascript - Paylike 模态金额参数
- java - Hibernate 3 到 4 迁移
- c# - 找不到“Vektor2”