我正在开发一个使用MongoDB的asp.net核心项目,同时我也在使用依赖项注入。
只有一个数据库,连接字符串保存在appsettings.json中。某些设备将不断通过API发送数据,以将其保存在MongoDB数据库中,该数据库应能正常工作:)
现在,我必须对其进行增强,它将有多个数据库,并且应该根据API请求将数据保存在相关的数据库中(我将在API请求中获取数据库名称)。
我的问题是,如何根据API请求更改数据库?同时使用相同的DbContext。创建多个DbContext不是一种选择。
我对MongoDb和asp.net内核有些陌生,因此非常感谢您的帮助或指导。
这是我的DbContext类
public class DbContext
{
private IMongoDatabase _database;
protected readonly MongoClient mongoClient;
public DbContext(MongoSetting dbConnSettings)
{
var mongoUrl = new MongoUrl(dbConnSettings.ConnectionString);
var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl);
mongoClient = new MongoClient(mongoClientSettings);
if (mongoClient != null)
_database = mongoClient.GetDatabase(dbConnSettings.database);
}...
我的StartUp类的一部分
services.AddTransient<CareHomeContext>();
services.AddSingleton(provider => provider.GetService<IOptions<MongoSetting>>().Value);
答案 0 :(得分:0)
如果我正确理解了您的用例,则可能还需要在每个请求中使用不同的数据库。
因此,我建议将数据库名称作为可选参数(以便在请求中未提供数据库名称的情况下使用配置中的默认值)作为DbContext
类方法,并创建一个如下所示在DbContext
类中获取数据库对象(而不是在构造函数中获取)的方法。
private IMongoDatabase GetDatabase(string databaseName) => mongoClient.GetDatabase(databaseName ?? defaultDatabaseName);
在每个DbContext
类方法中调用上述方法。例如
public async Task InsertAsync(string collectionName, Dictionary<string, object> fields, string databaseName = null) {
var database = GetDatabase(databaseName);
// Insert Code here
}
我希望这会有所帮助。