C#对接MongoDB如何简化数据库连接逻辑避免重复编写冗余代码
C# MongoDB连接复用最简方案
核心实现思路
你自行尝试的静态变量写法完全符合MongoDB官方使用规范:整个应用生命周期内仅需初始化1次IMongoClient实例,重复创建会造成不必要的连接池资源消耗,基于这个思路补全通用封装即可。
步骤1:创建全局静态帮助类
新建MongoDbHelper.cs文件,代码如下:
using MongoDB.Driver; // 静态类无需实例化,项目任意位置可直接调用 public static class MongoDbHelper { // 静态成员仅会在首次访问时初始化1次 private static readonly IMongoClient _client = new MongoClient("你的MongoDB连接字符串"); private static readonly IMongoDatabase _db = _client.GetDatabase("Aureliadb"); // 泛型方法支持返回任意类型的集合,解决动态类型丢失方法的问题 public static IMongoCollection<T> GetCollection<T>(string collectionName) { return _db.GetCollection<T>(collectionName); } }
步骤2:全局调用简化代码
你原来的CheckUser方法可以直接简化为以下写法,无需重复编写连接逻辑:
public static bool CheckUser(ulong userid) { var userCollection = MongoDbHelper.GetCollection<User>("user"); // 可直接调用Find等原生方法,还可简化判断逻辑 return userCollection.Find(x => x.id == userid).Any(); }
之前写法的问题说明
- 用
dynamic作为返回值:动态类型会丢失编译期类型校验,编译器无法识别返回的是IMongoCollection<User>类型,所以找不到Find方法,改用强类型泛型即可解决。 - 方法内重复创建
MongoClient:每次调用都新建客户端实例会造成连接资源浪费,用静态成员初始化一次即可。
新手使用提示
- 这套静态封装方案足够覆盖中小型项目需求,不需要额外学习复杂的依赖注入等技术就可以直接使用。
- 后续项目正式上线前建议把连接字符串放到配置文件中,不要硬编码在代码里,方便后续修改。
内容的提问来源于stack exchange,提问作者Viuツ
相关产品推荐
相关产品推荐

