C# mongodb幫助類
阿新 • • 發佈:2019-02-14
這是在C#連線MongoDB的幫助類,所使用的驅動是在Vs2015的Nuget管理器中下載的mongodb驅動。
下載第一個,會自動下載下面的兩個,不要刪除。
在配置檔案中配置連線字串connStr和資料庫名稱dbName:
<appSettings> <add key="webpages:Version" value="3.0.0.0"/> <add key="webpages:Enabled" value="false"/> <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> <add key="dbName" value="demodb"/> </appSettings> <connectionStrings> <add name="connStr" connectionString="mongodb://127.0.0.1:27017"/> </connectionStrings>
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<T> where T : BaseEntity { private IMongoDatabase db = null; private IMongoCollection<T> collection = null; public MgHelper() { this.db = Db.GetDb(); collection = db.GetCollection<T>(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<T>.Filter.Eq("Id", ObjectId.Parse(id)); var updated = Builders<T>.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<T>.Filter.Eq("Id", entity.Id); ReplaceOneResult result = collection.ReplaceOneAsync(filter, old).Result; } public void Delete(T entity) { var filter = Builders<T>.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<T> 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<Auth> mg = new MgHelper<Auth>();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Auth auth)
{
mg.Insert(auth);
return Content("<script>alert('success!');window.location='/Auth/Create';</script>");
}
[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("<script>alert('success!');window.location='/Auth/Modify';</script>");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
public partial class RoleController : BaseController
{
MgHelper<Role> mg = new MgHelper<Role>();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Role role)
{
mg.Insert(role);
return Content("<script>alert('success!');window.location='/Role/Create';</script>");
}
[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("<script>alert('success!');window.location='/Role/Modify';</script>");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
public partial class UserController : BaseController
{
MgHelper<User> mg = new MgHelper<User>();
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(User user)
{
mg.Insert(user);
return Content("<script>alert('success!');window.location='/User/Create';</script>");
}
[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("<script>alert('success!');window.location='/User/Modify';</script>");
}
[HttpPost]
public string Delete(string id)
{
mg.Modify(id, "State", "n");
return "success!";
}
}
}
我的測試專案是使用者管理系統,有三個類: User(使用者),Role(角色),Auth(許可權)。