如何解决WebAPI Switch数据库集合
我正在将Mongodb与c#驱动程序配合使用。
一般的问题是,一个用户如何在不影响其他用户的情况下通过api调用切换集合。
所有集合都在同一个数据库中,调用通过控制器转到服务类,如果我在服务中切换了IMongoCollection,由于该服务是在启动期间注入的,并且只有一个服务正在运行,因此它也会影响其他用户控制器。
为端点的每个呼叫创建一个新的服务实例是否合理?如果是这样,实施情况如何?
希望问题得到清楚的描述。谢谢!
解决方法
实际上,该问题的解决方案很简单,您需要创建多个设置才能自己阅读。无论您要交易哪个数据库,都可以按照自己的条件使用它。
添加appsettings.json->
"MongoConnection1": {
"ConnectionStringMongo": "connectionstring","Database": "your_collection1"
},"MongoConnection2": {
"ConnectionStringMongo": "connectionstring","Database": "your_collection2"
},
和
//add startup.cs service
services.Configure<YourSettingClass>(options =>
{
//YourSettingClass property = ConnectionStringMongo,Database
options.ConnectionStringMongo
= Configuration.GetSection("MongoConnection1:ConnectionStringMongo").Value;
options.Database
= Configuration.GetSection("MongoConnection1:Database").Value;
//Or add a list database property
//options.ConnectionStringMongo
//= Configuration.GetSection("MongoConnection2:ConnectionStringMongo").Value;
//options.Database.Add(Configuration.GetSection("MongoConnection1:Database").Value);
//options.Database.Add(Configuration.GetSection("MongoConnection2:Database").Value);
});
并使用mongoContext类:)
public MongoContext(IOptions<YourSettingClass> settings)
{
var client = new MongoClient(settings.Value.ConnectionStringMongo);
if (client != null)
_database = client.GetDatabase(settings.Value.Database);
}
编辑1: 我了解您,实际上,我们假设执行此操作的客户端正在更改应用程序设置。 假设您设置了默认连接和数据库。 当Clint进行更改时,将在静态类中读取的连接和数据库信息现在将更改。 从现在开始,下一个请求将在此频道上。
public static class ConnetionInformation
{
public static string connectionString = "MongoConnection1:ConnectionStringMongo";
public static string connectionDatabase = "MongoConnection1:ConnectionStringMongo";
public static void setConnection(string _connectionString,string _connectionDatabase)
{
connectionString = _connectionString;
connectionDatabase = _connectionDatabase;
}
}
public MongoContext(ConnetionInformation _connetionInformation,IConfiguration _configuration)
{
var client = new MongoClient(_configuration[_connetionInformation.connectionString]);
if (client != null)
_database = client.GetDatabase(_connetionInformation.connectionDatabase);
}
//exapmle set
ConnetionInformation.setConnection("MongoConnection2:ConnectionStringMongo","MongoConnection2:ConnectionStringMongo");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。