首页 > 解决方案 > .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 ???
}

标签: mongodbasp.net-coremulti-tenant

解决方案


如果您的方法涉及同一集群中的不同数据库,那么您不需要不同的连接字符串,而只需要一个将每个租户 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

推荐阅读