日期:2014-05-16  浏览次数:20564 次

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[_