这是在C#连接MongoDB的帮助类,所使用的驱动是在Vs2015的Nuget管理器中下载的mongodb驱动。
下载第一个,会自动下载下面的两个,不要删除。
在配置文件中配置连接字符串connStr和数据库名称dbName:
MongoDbHelper类:
using Cong.Model;
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
namespace Cong.Utility
{
public class Db
{
private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
private static readonly string dbName = ConfigurationManager.AppSettings["dbName"].ToString();
private static IMongoDatabase db = null;
private static readonly object lockHelper = new object();
private Db() { }
public static IMongoDatabase GetDb()
{
if (db == null)
{
lock (lockHelper)
{
if (db == null)
{
var client = new MongoClient(connStr);
db = client.GetDatabase(dbName);
}
}
}
return db;
}
}
public class MongoDbHelper where T : BaseEntity
{
private IMongoDatabase db = null;
private IMongoCollection collection = null;
public MgHelper()
{
this.db = Db.GetDb();
collection = db.GetCollection(typeof(T).Name);
}
public T Insert(T entity)
{
var flag = ObjectId.GenerateNewId();
entity.GetType().GetProperty("Id").SetValue(entity, flag);
entity.State = "y";
entity.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
entity.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
collection.InsertOneAsync(entity);
return entity;
}
public void Modify(string id, string field, string value)
{
var filter = Builders.Filter.Eq("Id", ObjectId.Parse(id));
var updated = Builders.Update.Set(field, value);
UpdateResult result = collection.UpdateOneAsync(filter, updated).Result;
}
public void Update(T entity)
{
var old = collection.Find(e => e.Id.Equals(entity.Id)).ToList().FirstOrDefault();
foreach (var prop in entity.GetType().GetProperties())
{
var newValue = prop.GetValue(entity);
var oldValue = old.GetType().GetProperty(prop.Name).GetValue(old);
if (newValue != null)
{
if (!newValue.ToString().Equals(oldValue.ToString()))
{
old.GetType().GetProperty(prop.Name).SetValue(old, newValue.ToString());
}
}
}
old.State = "y";
old.UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var filter = Builders.Filter.Eq("Id", entity.Id);
ReplaceOneResult result = collection.ReplaceOneAsync(filter, old).Result;
}
public void Delete(T entity)
{
var filter = Builders.Filter.Eq("Id", entity.Id);
collection.DeleteOneAsync(filter);
}
public T QueryOne(string id)
{
return collection.Find(a => a.Id == ObjectId.Parse(id)).ToList().FirstOrDefault();
}
public List QueryAll()
{
return collection.Find(a => a.State.Equals("y")).ToList();
}
}
}
另外,我的实体类全部都继承自下面这个基类,里面有几个数据中常用的字段
BaseEntity:
using MongoDB.Bson;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Cong.Model
{
public abstract class BaseEntity
{
public ObjectId Id { get; set; }
public string State { get; set; }
public string CreateTime { get; set; }
public string UpdateTime { get; set; }
}
}
最后,这个是我在MVC的一个控制器的代码,使用了增改查的功能,以供参考,另外这个我是用模板生成的代码。
using Cong.Model;
using Cong.Utility;
using MongoDB.Bson;
using System.Web.Mvc;
using WebApp.Models;
namespace WebApp.Controllers
{
public partial class AuthController : BaseController
{
MgHelper mg = new MgHelper();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Auth auth)
{
mg.Insert(auth);
return Content("");
}
[HttpGet]
public ActionResult Modify()
{
AuthVM authvm = new AuthVM { Auths = mg.QueryAll() };
return View(authvm);
}
[HttpPost]
public ActionResult Modify(Auth auth, FormCollection form)
{
auth.Id = ObjectId.Parse(form["id"]);
mg.Update(auth);
return Content("");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
public partial class RoleController : BaseController
{
MgHelper mg = new MgHelper();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Role role)
{
mg.Insert(role);
return Content("");
}
[HttpGet]
public ActionResult Modify()
{
RoleVM rolevm = new RoleVM { Roles = mg.QueryAll() };
return View(rolevm);
}
[HttpPost]
public ActionResult Modify(Role role, FormCollection form)
{
role.Id = ObjectId.Parse(form["id"]);
mg.Update(role);
return Content("");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
public partial class UserController : BaseController
{
MgHelper mg = new MgHelper();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(User user)
{
mg.Insert(user);
return Content("");
}
[HttpGet]
public ActionResult Modify()
{
UserVM uservm = new UserVM { Users = mg.QueryAll() };
return View(uservm);
}
[HttpPost]
public ActionResult Modify(User user, FormCollection form)
{
user.Id = ObjectId.Parse(form["id"]);
mg.Update(user);
return Content("");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
}
我的测试项目是用户管理系统,有三个类: User(用户),Role(角色),Auth(权限)。
源代码下载:http://download.csdn.net/detail/cycong108/9737751