C# mongodb帮助类

这是在C#连接MongoDB的帮助类,所使用的驱动是在Vs2015的Nuget管理器中下载的mongodb驱动。

下载第一个,会自动下载下面的两个,不要删除。

在配置文件中配置连接字符串connStr和数据库名称dbName:

 1 <appSettings>
 2     <add key="webpages:Version" value="3.0.0.0"/>
 3     <add key="webpages:Enabled" value="false"/>
 4     <add key="ClientValidationEnabled" value="true"/>
 5     <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 6     <add key="dbName" value="demodb"/>
 7 </appSettings>
 8 <connectionStrings>
 9     <add name="connStr" connectionString="mongodb://127.0.0.1:27017"/>
10 </connectionStrings>

MongoDbHelper类:

  1 using Cong.Model;
  2 using MongoDB.Bson;
  3 using MongoDB.Driver;
  4 using System;
  5 using System.Collections.Generic;
  6 using System.Configuration;
  7 using System.Linq;
  8
  9 namespace Cong.Utility
 10 {
 11     public class Db
 12     {
 13         private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
 14
 15         private static readonly string dbName = ConfigurationManager.AppSettings["dbName"].ToString();
 16
 17         private static IMongoDatabase db = null;
 18
 19         private static readonly object lockHelper = new object();
 20
 21         private Db() { }
 22
 23         public static IMongoDatabase GetDb()
 24         {
 25             if (db == null)
 26             {
 27                 lock (lockHelper)
 28                 {
 29                     if (db == null)
 30                     {
 31                         var client = new MongoClient(connStr);
 32                         db = client.GetDatabase(dbName);
 33                     }
 34                 }
 35             }
 36             return db;
 37         }
 38     }
 39
 40     public class MongoDbHelper<T> where T : BaseEntity
 41     {
 42         private IMongoDatabase db = null;
 43
 44         private IMongoCollection<T> collection = null;
 45
 46         public MgHelper()
 47         {
 48             this.db = Db.GetDb();
 49             collection = db.GetCollection<T>(typeof(T).Name);
 50         }
 51
 52         public T Insert(T entity)
 53         {
 54             var flag = ObjectId.GenerateNewId();
 55             entity.GetType().GetProperty("Id").SetValue(entity, flag);
 56             entity.State = "y";
 57             entity.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
 58             entity.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
 59
 60             collection.InsertOneAsync(entity);
 61             return entity;
 62         }
 63
 64         public void Modify(string id, string field, string value)
 65         {
 66             var filter = Builders<T>.Filter.Eq("Id", ObjectId.Parse(id));
 67             var updated = Builders<T>.Update.Set(field, value);
 68             UpdateResult result = collection.UpdateOneAsync(filter, updated).Result;
 69         }
 70
 71         public void Update(T entity)
 72         {
 73             var old = collection.Find(e => e.Id.Equals(entity.Id)).ToList().FirstOrDefault();
 74
 75             foreach (var prop in entity.GetType().GetProperties())
 76             {
 77                 var newValue = prop.GetValue(entity);
 78                 var oldValue = old.GetType().GetProperty(prop.Name).GetValue(old);
 79                 if (newValue != null)
 80                 {
 81                     if (!newValue.ToString().Equals(oldValue.ToString()))
 82                     {
 83                         old.GetType().GetProperty(prop.Name).SetValue(old, newValue.ToString());
 84                     }
 85                 }
 86             }
 87             old.State = "y";
 88             old.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
 89
 90             var filter = Builders<T>.Filter.Eq("Id", entity.Id);
 91             ReplaceOneResult result = collection.ReplaceOneAsync(filter, old).Result;
 92         }
 93
 94         public void Delete(T entity)
 95         {
 96             var filter = Builders<T>.Filter.Eq("Id", entity.Id);
 97             collection.DeleteOneAsync(filter);
 98         }
 99
100         public T QueryOne(string id)
101         {
102             return collection.Find(a => a.Id == ObjectId.Parse(id)).ToList().FirstOrDefault();
103         }
104
105         public List<T> QueryAll()
106         {
107             return collection.Find(a => a.State.Equals("y")).ToList();
108         }
109     }
110 }

另外,我的实体类全部都继承自下面这个基类,里面有几个数据中常用的字段

BaseEntity:

 1 using MongoDB.Bson;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace Cong.Model
 9 {
10     public abstract class BaseEntity
11     {
12         public ObjectId Id { get; set; }
13
14         public string State { get; set; }
15
16         public string CreateTime { get; set; }
17
18         public string UpdateTime { get; set; }
19     }
20 }

最后,这个是我在MVC的一个控制器的代码,使用了增改查的功能,以供参考,另外这个我是用模板生成的代码。

  1 using Cong.Model;
  2 using Cong.Utility;
  3 using MongoDB.Bson;
  4 using System.Web.Mvc;
  5 using WebApp.Models;
  6
  7 namespace WebApp.Controllers
  8 {
  9
 10     public partial class AuthController : BaseController
 11     {
 12         MgHelper<Auth> mg = new MgHelper<Auth>();
 13
 14         public ActionResult Index()
 15         {
 16             return View();
 17         }
 18
 19         [HttpGet]
 20         public ActionResult Create()
 21         {
 22             return View();
 23         }
 24
 25         [HttpPost]
 26         public ActionResult Create(Auth auth)
 27         {
 28             mg.Insert(auth);
 29             return Content("<script>alert(‘success!‘);window.location=‘/Auth/Create‘;</script>");
 30         }
 31
 32         [HttpGet]
 33         public ActionResult Modify()
 34         {
 35             AuthVM authvm = new AuthVM { Auths = mg.QueryAll() };
 36             return View(authvm);
 37         }
 38
 39         [HttpPost]
 40         public ActionResult Modify(Auth auth, FormCollection form)
 41         {
 42             auth.Id = ObjectId.Parse(form["id"]);
 43             mg.Update(auth);
 44             return Content("<script>alert(‘success!‘);window.location=‘/Auth/Modify‘;</script>");
 45         }
 46
 47         [HttpPost]
 48         public string Delete(string id)
 49         {
 50             mg.Modify(id, "State", "n");
 51             return "success!";
 52         }
 53     }
 54
 55     public partial class RoleController : BaseController
 56     {
 57         MgHelper<Role> mg = new MgHelper<Role>();
 58
 59         public ActionResult Index()
 60         {
 61             return View();
 62         }
 63
 64         [HttpGet]
 65         public ActionResult Create()
 66         {
 67             return View();
 68         }
 69
 70         [HttpPost]
 71         public ActionResult Create(Role role)
 72         {
 73             mg.Insert(role);
 74             return Content("<script>alert(‘success!‘);window.location=‘/Role/Create‘;</script>");
 75         }
 76
 77         [HttpGet]
 78         public ActionResult Modify()
 79         {
 80             RoleVM rolevm = new RoleVM { Roles = mg.QueryAll() };
 81             return View(rolevm);
 82         }
 83
 84         [HttpPost]
 85         public ActionResult Modify(Role role, FormCollection form)
 86         {
 87             role.Id = ObjectId.Parse(form["id"]);
 88             mg.Update(role);
 89             return Content("<script>alert(‘success!‘);window.location=‘/Role/Modify‘;</script>");
 90         }
 91
 92         [HttpPost]
 93         public string Delete(string id)
 94         {
 95             mg.Modify(id, "State", "n");
 96             return "success!";
 97         }
 98     }
 99
100     public partial class UserController : BaseController
101     {
102         MgHelper<User> mg = new MgHelper<User>();
103
104         public ActionResult Index()
105         {
106             return View();
107         }
108
109         [HttpGet]
110         public ActionResult Create()
111         {
112             return View();
113         }
114
115         [HttpPost]
116         public ActionResult Create(User user)
117         {
118             mg.Insert(user);
119             return Content("<script>alert(‘success!‘);window.location=‘/User/Create‘;</script>");
120         }
121
122         [HttpGet]
123         public ActionResult Modify()
124         {
125             UserVM uservm = new UserVM { Users = mg.QueryAll() };
126             return View(uservm);
127         }
128
129         [HttpPost]
130         public ActionResult Modify(User user, FormCollection form)
131         {
132             user.Id = ObjectId.Parse(form["id"]);
133             mg.Update(user);
134             return Content("<script>alert(‘success!‘);window.location=‘/User/Modify‘;</script>");
135         }
136
137         [HttpPost]
138         public string Delete(string id)
139         {
140             mg.Modify(id, "State", "n");
141             return "success!";
142         }
143     }
144 }

我的测试项目是用户管理系统,有三个类: User(用户),Role(角色),Auth(权限)。

源代码下载:http://download.csdn.net/detail/cycong108/9737633

时间: 2024-10-18 09:31:33

C# mongodb帮助类的相关文章

JAVA单例MongoDB工具类

经常对MongoDB进行一些常用操作,为了方便起见将这些常用操作合并到一个工具类中,方便自己开发使用. 没用Spring Data.Morphia等框架是为了减少学习.维护成本,另外自己直接JDBC方式的话可以更方便的控制操作.为自己以后的积累留一个脚印. 代码如下: package utils; import java.util.ArrayList; import java.util.List; import org.apache.commons.configuration.Composite

C#操作MongoDB帮助类

利用MongoDB for C# Driver编写访问MongoDB数据库的帮助类. 1.创建数据库连接 /// <summary> /// 获取数据库实例对象 /// </summary> /// <param name="connectionString">数据库连接串</param> /// <param name="dbName">数据库名称</param> /// <return

mongoDB工具类以及测试类【java】

java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCurs

MongoDB操作类PHP代码

<?php include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'Config'.DIRECTORY_SEPARATOR.'database.php'; class MongoClass3{   static public $conn;//数据库连接   static public $db;//数据库选择   static public $collection;//结果集合   public $debug;  

Java中遍历实体类(处理MongoDB)

在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历: 1 //java中遍历实体类,获取属性名和属性值 2 public static void testReflect(Object model) throws Exception{ 3 for (Field field : model.getClass().getDeclaredFields())

一个基于mongoDB的 MongoTemplate 的基本操作类

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.mongodb.client.ListIndexesIterable; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Indexes; import org.bson.Document; import org.sprin

基于C#的MongoDB数据库开发应用(2)--MongoDB数据库的C#开发

在上篇博客<基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用>里面,我总结了MongoDB数据库的一些基础信息,并在最后面部分简单介绍了数据库C#驱动的开发 ,本文继续这个主题,重点介绍MongoDB数据库C#方面的使用和封装处理过程,利用泛型和基类对象针对数据访问层进行的封装处理. 前面介绍到,当前2.2版本的数据库C#驱动的API,支持两种不同的开发接口,一个是基于MongoDatabase的对象接口,一个是IMongoDatabase的对象接口,前者中

MongoDB入门简单介绍

有关于MongoDB的资料如今较少,且大多为英文站点,以上内容大多由笔者翻译自官网,请翻译或理解错误之处请指证.之后笔者会继续关注MongoDB,并翻译“Developer Zone”和“Admin Zone”的相关内容,敬请期待下期内容. MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方式. 它的特点是高性能.易部署.易使用,存储数据很方便.主要功能特性有:*面向集合存储,易存储对象类型的数据. *模式自由.*支持动态查

Mongodb设置Replica Set集群 并使用PHP来连接

Mongodb之前一直是做主从模式,后来官方推荐用Replica Set(简称RS)来代替主从,主要是当primary节点出现故障后,RS集群内会有自动投票选举primary节点的机制,自动选出新的primary节点,这样应用程序就不需要关心主从切换的问题.想要配置一个简单的RS,至少要两台机器.我本地用了VMware以NAT方式跑了两台VPS,IP分别是:192.168.33.112和192.168.33.119,注意两台VPS的访问互通问题(iptables network等) 1.ssh登