【发布时间】:2022-12-03 13:45:40
【问题描述】:
我是 .net core 的新手。我必须使用 MongoDB 构建 rest api。我想知道如何使用全局database 连接和全局配置来获取数据库的任何集合。我在互联网上发现的是,我可以在 appsettings.json 中包含 database name、connection string、collection name 并创建这样的类
public class MongoDBSettings {
public string ConnectionURI { get; set; } = null!;
public string DatabaseName { get; set; } = null!;
public string CollectionName { get; set; } = null!;
}
在此之后我可以在Program.cs中配置这个数据库连接
builder.Services.Configure<MongoDBSettings(builder.Configuration.GetSection("MongoDB"));
builder.Services.AddSingleton<MongoDBService>();
现在查询集合我应该在各自的服务文件中这样做让OrderService.cs
private readonly IMongoCollection<Playlist> _playlistCollection;
public OrderService(IOptions<MongoDBSettings> mongoDBSettings) {
MongoClient client = new MongoClient(mongoDBSettings.Value.ConnectionURI);
IMongoDatabase database = client.GetDatabase(mongoDBSettings.Value.DatabaseName);
_playlistCollection = database.GetCollection<Playlist>(mongoDBSettings.Value.CollectionName);
}
public async Task<List<Playlist>> GetAsync() { // my code here }
我了解上述所有方法。但是这种方法的问题是应用程序中没有全局连接。每次我必须查询任何集合时,每个实体服务(如orderService.cs)都会像我上面提到的那样创建一个新的数据库连接
MongoClient client = new MongoClient(mongoDBSettings.Value.ConnectionURI);
所以这是低效的。这种方法的第二个问题是,要获取每个数据库集合的实例,我必须在每个 service.cs 文件中编写这 3 行代码,以获取每个集合的实例,如下所示
MongoClient client = new MongoClient(mongoDBSettings.Value.ConnectionURI);
IMongoDatabase database = client.GetDatabase(mongoDBSettings.Value.DatabaseName);
_playlistCollection = database.GetCollection<Playlist>(mongoDBSettings.Value.CollectionName);
那么我怎样才能克服这两个问题,我能解决这两个问题吗?
- 如何拥有通用的全局数据库连接,并且可以从每个数据库中使用?
- 如何使用通用逻辑来获取数据库集合实例的实例?
【问题讨论】: