【问题标题】:How to have global database connection across the application in .net core with mongodb?如何使用 mongodb 在 .net core 中跨应用程序建立全局数据库连接?
【发布时间】:2022-12-03 13:45:40
【问题描述】:

我是 .net core 的新手。我必须使用 MongoDB 构建 rest api。我想知道如何使用全局database 连接和全局配置来获取数据库的任何集合。我在互联网上发现的是,我可以在 appsettings.json 中包含 database nameconnection stringcollection 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);

那么我怎样才能克服这两个问题,我能解决这两个问题吗?

  1. 如何拥有通用的全局数据库连接,并且可以从每个数据库中使用?
  2. 如何使用通用逻辑来获取数据库集合实例的实例?

【问题讨论】:

    标签: c# mongodb .net-core


    【解决方案1】:

    您需要一个 dbcontext class 来存储您的所有表 (dbset),以便您可以在应用程序的任何位置访问它们。我将使用 this repo 作为基本示例。

    您有 context class and it's interface,稍后通过 DI 将其注入到您需要的每个控制器或类构造函数中。 (检查line 75 on Startup.cs)。

    一旦完成,您就可以在任何地方使用您的上下文接口。例如,在 repository class 中。至于您的数据库配置设置,我不明白为什么您可能需要在整个应用程序中使用它。也许您只需要在 Startup.cs 处使用,但以防万一您检查出 the options monitor 对象。当您需要将 appSettings.json 中的配置添加到应用程序中任何位置的对象时,它会派上用场。只要确保您没有公开任何应用机密即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多