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");