在开发过程中,需要用到MongoDB,本身MongoDB自己对类的封装就特别好了。为了更加符合我们平时的开发使用,我现在进行了一个简单的封装操作。

连接数据库类:MongoDBContext

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration; using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Driver.Linq; namespace XXXXX.MongoDB
{
public class MongoDBContext
{
// 数据库链接
private readonly MongoDatabase database; public MongoDBContext()
: this(ConfigurationManager.AppSettings["DefaultMongoDBConnection"], ConfigurationManager.AppSettings["DefaultMonoDbDatabase"])
{
} /// <summary>
/// 构造函数。根据指定连接字符串和数据库名
/// </summary>
/// <param name="connectionString">连接字符串</param>
/// <param name="dbName">数据库名</param>
public MongoDBContext(string connectionString, string dbName)
{
if (string.IsNullOrEmpty(connectionString))
{
throw new ArgumentNullException("connectionString is null");
} if (string.IsNullOrEmpty(dbName))
{
throw new ArgumentNullException("dbName is null");
} var client = new MongoClient(connectionString);
var server = client.GetServer();
this.database = server.GetDatabase(dbName);
} /// <summary>
/// 获取当前连接数据库的指定集合【依据类型】
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public MongoCollection<T> Collection<T>()
{
return database.GetCollection<T>(typeof(T).Name);
}
}
}

服务操作类:MongoDBService

using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; namespace XXXXX.MongoDB
{ public class MongoDBService<T> : IMongoDBService<T> where T : class,new()
{
MongoDBContext mc = new MongoDBContext(); /// <summary>
/// 查询符合条件的集合
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public IEnumerable<T> GetList()
{
var query = Query<T>.Where(o => true);
return mc.Collection<T>().Find(query);
} /// <summary>
/// 查询符合条件的集合
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public IEnumerable<T> GetList(Expression<Func<T, bool>> whereLambda)
{
var query = Query<T>.Where(whereLambda);
return mc.Collection<T>().Find(query);
} /// <summary>
/// 查询一条记录
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public T GetOne(Expression<Func<T, bool>> whereLambda)
{
var query = GetList(whereLambda).FirstOrDefault();
return query;
} /// <summary>
/// 增加
/// </summary>
/// <param name="entity"></param>
public void Insert(T entity)
{
mc.Collection<T>().Insert(entity);
} /// <summary>
/// 批量增加
/// </summary>
/// <param name="entitys"></param>
public void InsertAll(IEnumerable<T> entitys)
{
mc.Collection<T>().InsertBatch(entitys);
} /// <summary>
/// 更新一个实体
/// </summary>
/// <param name="entity"></param>
public void Update(T entity)
{
mc.Collection<T>().Save(entity);
} /// <summary>
/// 删除
/// </summary>
/// <param name="whereLambda"></param>
public void Remove(Expression<Func<T, bool>> whereLambda)
{
var query = Query<T>.Where(whereLambda);
mc.Collection<T>().Remove(query);
}
}
}

上面方法封装完后,我们就可以直接使用了。使用很简单,比如,我有一个ActivityModel实体,使用时,如下:

        public void activityTest()
{
var activityDb = new MongoDBService<ActivityModel>();
var activityList = activityDb.GetList().ToList();
var activity = activityDb.GetOne(o => o.Id==ObjectId.Parse("54d9aecd89f0bd14d81a63a7"));
var xxx = activity.To();
}

MongoDB 工具助手类(.NET)的更多相关文章

  1. JAVA单例MongoDB工具类

    我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用. 没用Spring Data.Morphia等框架是为了减少学习.维护成本,另外自己直接JDBC方式的话可以 ...

  2. mongodb工具类

    pom.xml文件增加Mongodb jar包 <dependency> <groupId>org.mongodb</groupId> <artifactId ...

  3. ADO.NET数据库操作助手类

    SQL语句操作增删查改助手类 using System; using System.Collections.Generic; using System.Configuration; using Sys ...

  4. 【C#】SQL数据库助手类2.0(自用)

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  5. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

  6. Yii2 数组助手类arrayHelper

    数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $na ...

  7. Linux性能优化 第八章 实用工具:性能工具助手

    8.1性能工具助手 Linux有丰富的工具,这些工具组合来使用会更加强大.性能工具也一样,单独使用虽然也没有问题,但是和其他的工具组合起来就能显著提高有效性和易用性. 8.1.1 自动执行和记录命令 ...

  8. WorldWind源码剖析系列:代理助手类ProxyHelper

    代理助手类ProxyHelper通过平台调用的互操作技术封送了若干Win32结构体和函数.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: 内嵌类型WINHTTP_AUTOPROX ...

  9. WorldWind源码剖析系列:图像助手类ImageHelper

    图像助手类ImageHelper封装了对各种图像的操作.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: public static bool IsGdiSupportedImag ...

随机推荐

  1. Javascript 细节优化技巧(转)

    break 语句和 continue 语句 break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行. break语句用于跳出代码块或循环. var i = 0; while( ...

  2. jQuery的回调管理机制

    // 对option的一个缓存,避免每次都需要createOptions,option是创建Callback对象时的传入的参数// 每个option被存入optionsCache中类似于{memory ...

  3. Storm架构和编程模型总结

    1. 编程模型 DataSource:外部数据源 Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt Bolt:接受Spout发送的数 ...

  4. Hibernate 查询sql结果行数的几种方法

    一.前言 这个东西,难度几乎没有,就是繁琐. 一条简单的select count(*) from table_name 都能有多种书写方式. 总是忘,这里记录下. 一 .通过Criteria 查询 C ...

  5. hihoCoder挑战赛28 题目3 : 树的方差

    题目3 : 树的方差 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 对于一棵 n 个点的带标号无根树,设 d[i] 为点 i 的度数. 定义一棵树的方差为数组 d[1. ...

  6. 简易扩展Visual Studio UnitTesting支持TestMethodCase

    NUnit的TestCaseAttribute可以简化大量的测试参数输入用例的编写,如果基于Visual Studio Unit Test Project开发则默认没有类似的功能,看一段对比代码: p ...

  7. 去掉VS2010代码中文注释的红色下划线

    VS2010代码中文注释出现红色下划线,代码看上去很不美观,发现是由于安装Visual Assist X插件造成的. 解决办法:打开VAX的Options对话框,取消Advanced --> U ...

  8. for,for-each,for-in,for-of,map的比较

    参考: 全面解析JavaScript里的循环方法之forEach,for-in,for-of Iterator 和 for...of 循环 JavaScript Array 对象 常规for for循 ...

  9. Office word 2007不能另存为pdf格式的解决方法

    我们在使用Office word 2007时,经常会使用到另存为 PDF 或 XPS(P),遗憾的是,很多人都找不到这个选项, 或者在安装word的时候,并没有安装该加载项,需要你在后期安装,我们来怎 ...

  10. 【CF687D】Dividing Kingdom II 线段树+并查集

    [CF687D]Dividing Kingdom II 题意:给你一张n个点m条边的无向图,边有边权$w_i$.有q个询问,每次给出l r,问你:如果只保留编号在[l,r]中的边,你需要将所有点分成两 ...