You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#项目中配置全局单例MongoDB连接

MongoDB单例连接实现方案(C# 驱动2.12.2适用)

MongoDB官方C#驱动中,MongoClient本身是线程安全类型,官方推荐全应用生命周期内仅保留一个实例,即可实现连接池复用,避免重复创建客户端带来的资源损耗。
原有的Web.config配置无需修改,直接复用即可,仅需要修改连接管理类和业务调用逻辑:


步骤1:改造DBConnection为单例连接管理类

使用C#自带的Lazy<T>实现线程安全的懒加载单例,避免多请求并发场景下重复创建实例:

using System.Configuration;
using MongoDB.Driver;

namespace MyProj.DataAccess.Implementations
{
    internal class DBConnection
    {
        // 懒加载初始化MongoClient,默认线程安全
        private static readonly Lazy<MongoClient> _mongoClient = new Lazy<MongoClient>(() => 
            new MongoClient(ConnectionString));
        
        // 懒加载初始化业务库实例
        private static readonly Lazy<IMongoDatabase> _mongoDatabase = new Lazy<IMongoDatabase>(() => 
            _mongoClient.Value.GetDatabase(DatabaseName));

        // 读取配置属性
        private static string ConnectionString => ConfigurationManager.ConnectionStrings["MongoConnection"].ConnectionString;
        private static string DatabaseName => ConfigurationManager.AppSettings["MongoDBDatabase"].ToString();

        // 对外暴露的单例入口,业务层直接调用即可
        public static IMongoDatabase Database => _mongoDatabase.Value;
        // 如有单独操作客户端的需求可额外暴露Client实例
        public static MongoClient Client => _mongoClient.Value;
    }
}

步骤2:改造业务DAL调用逻辑

不再每次方法内创建MongoClient,直接复用单例连接即可:

using MongoDB.Driver;
using System.Collections.Generic;
using System.Linq;

namespace MyProj.DataAccess.Implementations
{
    public class UserDAL: IUserDAL
    {
        // 可提前初始化集合对象,也可以在方法内按需获取
        private readonly IMongoCollection<UserTbl> _userCollection = DBConnection.Database.GetCollection<UserTbl>("UserTbls");

        public List<UserTbl> GetAll()
        {
            return _userCollection.AsQueryable().ToList();
        }
    }
}

注意事项

  • 不要手动调用MongoClient的Dispose方法,单例实例的生命周期和应用保持一致,应用退出时会自动释放资源
  • 可以在连接字符串中按需调整连接池配置,比如添加maxPoolSize=200调整最大连接数适配高并发场景
  • 该实现对2.12.2版本驱动完全兼容,不需要升级驱动版本

内容的提问来源于stack exchange,提问作者Aneesh S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:45:03