MongoDB学习笔记三一C#操作数据库
目标:向数据库插入两条Notes,一个包含标签一个没有,然后通过Update给不包含标签的Notes添加标签
为了完成我们的目标,首先我们的到http://github.com/samus/mongodb-csharp 下载Mongodb的c#驱动,解压缩并打开Visual Studio解决方案,然后编译得到两个DLL的:MongoDB.Driver.dll、MongoDB.Linq.dll 。我们用json.net来实现序列化和反序列化,您可以从这里下载 。
接着我们用vs2010创建一个简单的控制台应用程序,这里提供三种用C#操作MongoDB的方法:1.使用JSON 2.使用序列化/反序列化的Json.Net 3.使用动态代理
一、这里我们创建一个帮助类(MongoJson.cs)来实现数据库Document和C# 实体类之间的映射:
using System.Collections.Generic;
using System.Linq;
using MongoDB.Driver;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Pls.MdbIntro
{
public class MongoJson
{
private const string _oidContainerName = "_id";
public T ObjectFrom<T>(Document document)
where T : class, IMongoEntity
{
if (document == null)
return null;
return JsonConvert.DeserializeObject<T>(document.ToString());
}
public Document DocumentFrom(string json)
{
return PopulateDocumentFrom(new Document(), json);
}
public Document DocumentFrom<T>(T item)
where T : class, IMongoEntity
{
return PopulateDocumentFrom(new Document(), item);
}
public Document PopulateDocumentFrom<T>(Document document, T item)
where T : class, IMongoEntity
{
if (item == null)
return document;
var json = JsonConvert.SerializeObject(item, Formatting.None);
return PopulateDocumentFrom(document, json);
}
private Document PopulateDocumentFrom(Document document, string json)
{
var keyValues = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
foreach (var keyValue in keyValues)
{
var isEmptyKeyField = (
keyValue.Key == _oidContainerName && document[_