使用MongoDB的支持Linq 驱动NoRM

MongoDB的驱动有好几个,分布式文件存储的数据库开源项目MongoDB里使用的是github.com/samus/mongodb-csharp,monogodb-csharp不是强类型,使用起来不方便。转向使用支持强类型访问MongoDB的NoRM C# driver。NoRM 驱动和MongoDB-CSharp的一个区别的地方就是NoRM使用强类型的类操作MongoDB-CSharp的Document类。

使用NoRM很简单,引用NoRM.dll就可以了,下面的例子是一个控制台程序:

模型类,代表保存到数据库的数据

using System;   
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using Norm; 
namespace FirstMongoDb   
{    
    public class Customer: IHaveIdentifier    
    {    
        public ObjectId _id { get; set; }    
        public string Name { get; set; }    
        public DateTime LastOrderUtc { get; set; }    
        public List<string> OrderedItems { get; set; } 
        public Customer()   
        {    
            OrderedItems = new List<string>();    
        }    
    }    
}

这个足够简单了,下面我们连到数据库

public class MongoDbDataContext : IDisposable   
    {    
        private readonly MongoQueryProvider provider; 
        public MongoQueryProvider Provider   
        {    
            get { return provider; }    
        } 
        public static string DatabaseName { get; set; } 
        public MongoDbDataContext()   
        {    
            if ( string.IsNullOrEmpty( DatabaseName ) )    
            {    
                throw new InvalidOperationException( "You must set the static DatabaseName property." );    
            }    
            provider = new MongoQueryProvider(    
 new Mongo( DatabaseName, "127.0.0.1", "27017", null ) ); 
        }

使用NoRM去冬连接到数据需要提供一个数据库名,服务器地址和端口,参看上述红色代码。

插入一个对象到数据库

private static void Insert()   
        {
            Customer c = new Customer();   
            c.Name = "Jake";    
            c.LastOrderUtc = DateTime.UtcNow;    
            c.OrderedItems.Add("frappa");    
            c.OrderedItems.Add( "beer" );    
            c.OrderedItems.Add( "redbull!" );    
            c.OrderedItems.Add( "wings" ); 
            using ( MongoDbDataContext ctx = new MongoDbDataContext() )   
            {    
                ctx.Add(c);    
            }    
        }

使用LINQ查询数据库

using ( MongoDbDataContext ctx = new MongoDbDataContext() )   
 {    
                var query =    
                    from c in ctx.Customers    
                    where c.Name == "Michael"    
                    orderby c.LastOrderUtc descending    
                    select c; 
                foreach (var customer in query)   
                {    
                    Console.WriteLine("{0} bought {1}",    
                        customer.Name,    
                        customer.OrderedItems.FirstOrDefault()    
                        );    
                }    
            }

参考:Using MongoDB with the NoRM driver

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Porschev[钟慰]的专栏

Asp.Net开发等级星使用(Jquery Rating)

插件参数: rater第一个参数是AJAX提交的URL rater第二个参数 maxvalue:最大星数 curvalue:默认选择多少颗星 title:鼠标放...

2347
来自专栏Java成神之路

极光推送_总结_01_Java实现极光推送

1463
来自专栏王磊的博客

c# 检测cpu使用率[测试通过]

创建一个控制台应用程序,代码如下 using System; using System.Collections.Generic; using System.Li...

3444
来自专栏菩提树下的杨过

SqlTransaction 数据库编程事务使用示例

在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Roll...

2248
来自专栏技术之路

lock小记

都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况 做个小例子,怕自己再忘了 不加lock的时候 结果可能 是负的下面...

1946
来自专栏Porschev[钟慰]的专栏

Asp.Net无刷新分页( jquery.pagination.js)

采用Jquery无刷新分页插件jquery.pagination.js 实现无刷新分页效果 友情提示:本示例Handler中采用StringBuilder的ap...

2689
来自专栏木宛城主

SharePoint 2013 How to Backup Site Collection Automatically With a PowerShell Script

In this post I will introduce a way how to run a script for backing up SharePoin...

2427
来自专栏逸鹏说道

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

先不说如何实现,先来看看效果图: ? 读取远程的需要提供下远程的计算用户名和密码即可。 如何实现这个代码功能,请看如下代码部分: #region//获取日志文件...

3415
来自专栏林德熙的博客

C# Task.Run 和 Task.Factory.StartNew 区别 创建新线程等待线程长时间运行

有小伙伴问我,为什么不推荐他使用 Task.Factory.StartNew ,因为 Task.Run 是比较新的方法。 本文告诉大家 Task.Run 和 T...

1631
来自专栏博客园

Asp.Net Web API(六)

     Asp.Net Web API不可以需要IIS。可以自己在主机上承载一个Web API

1354

扫码关注云+社区

领取腾讯云代金券