MongoRepository

起步

现在已经非常擅长使用Repository方式开发关系数据库的程序了,但是在使用Nosql如Mongo的时候,更多的是使用Mongo Driver,无意中看到了MongoRepository,允许了以Repository的方式去开发使用Mongo了。

1.新建项目通过NuGet 引入MongoRepository ;

2.我们使用的是Console application新建一个App.config,添加如下信息:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MongoServerSettings"
         connectionString="mongodb://localhost/SampleProject" />
  </connectionStrings>
</configuration>

这里保证了程序连接到我们的名字为:SampleProject的Mongo上,如果不存在SampleProject系统则会自动帮助我们创建SampleProject

定义业务模型

建立业务model集成Entity,这样程序会见Model文件对应到Mongo之中,创建Customer及product:

using System.Collections.Generic;
using MongoRepository;

public class Customer : Entity  //Inherit from Entity!
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<Product> Products { get; set; }

    public Customer()
    {
        this.Products = new List<Product>();
    }
}

public class Product //No need to inherit from Entity; This object is not contained in
                     //it‘s "own" MongoDb document. It is only contained in a customer
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

程序会自动为每个继承自Entity的model创建一个string类型的属性:Id。

如何使用

建立连接,定义model之后就可以以Repository的方式使用Mongo了。

using System;
using System.Linq;
using MongoRepository;

class Program
{
    static MongoRepository<Customer> customerrepo = new MongoRepository<Customer>();

    static void Main(string[] args)
    {

        //Add customers
        var john = new Customer() { FirstName = "John", LastName = "Doe" };
        var jane = new Customer() { FirstName = "Jane", LastName = "Doe" };
        var jerry = new Customer() { FirstName = "Jerry", LastName = "Maguire" };
        customerrepo.Add(new[] { john, jane, jerry });

        //Show contents of DB
        DumpData();

        //Update customers
        john.FirstName = "Johnny";  //John prefers Johnny
        customerrepo.Update(john);

        jane.LastName = "Maguire";  //Jane divorces John and marries Jerry
        customerrepo.Update(jane);

        //Delete customers
        customerrepo.Delete(jerry.Id);  //Jerry passes away

        //Add some products to John and Jane
        john.Products.AddRange(new[] {
                new Product() { Name = "Fony DVD Player XY1299", Price = 35.99M },
                new Product() { Name = "Big Smile Toothpaste", Price = 1.99M }
        });
        jane.Products.Add(new Product() { Name = "Life Insurance", Price = 2500 });
        customerrepo.Update(john);
        customerrepo.Update(jane);
        //Or, alternatively: customerrepo.Update(new [] { john, jane });

        //Show contents of DB
        DumpData();

        //Finally; demonstrate GetById and First
        var mysterycustomer1 = customerrepo.GetById(john.Id);
        var mysterycustomer2 = customerrepo.First(c => c.FirstName == "Jane");

        Console.WriteLine("Mystery customer 1: {0} (having {1} products)",
                mysterycustomer1.FirstName, mysterycustomer1.Products.Count);
        Console.WriteLine("Mystery customer 2: {0} (having {1} products)",
                mysterycustomer2.FirstName, mysterycustomer2.Products.Count);

        //Delete all customers
        customerrepo.DeleteAll();

        //Halt for user
        Console.WriteLine("Press any key...");
        Console.ReadKey();
    }

    private static void DumpData()
    {
        //Print all data
        Console.WriteLine("Currently in our database:");
        foreach (Customer c in customerrepo)
        {
            Console.WriteLine("{0}\t{1}\t has {2} products",
                c.FirstName, c.LastName, c.Products.Count);
            foreach (Product p in c.Products)
                Console.WriteLine("\t{0} priced ${1:N2}", p.Name, p.Price);
            Console.WriteLine("\tTOTAL: ${0:N2}", c.Products.Sum(p => p.Price));
        }
        Console.WriteLine(new string(‘=‘, 50));
    }
}

执行结果:

Currently in our database:
John    Doe      has 0 products
        TOTAL: $0,00
Jane    Doe      has 0 products
        TOTAL: $0,00
Jerry   Maguire  has 0 products
        TOTAL: $0,00
==================================================
Currently in our database:
Jane    Maguire  has 1 products
        Life Insurance priced $2.500,00
        TOTAL: $2.500,00
Johnny  Doe      has 2 products
        Fony DVD Player XY1299 priced $35,99
        Big Smile Toothpaste priced $1,99
        TOTAL: $37,98
==================================================
Mystery customer 1: Johnny (having 2 products)
Mystery customer 2: Jane (having 1 products)
Press any key...

文件下载:http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=mongorepository&DownloadId=894208&FileTime=130528383908000000&Build=20941

时间: 2025-01-06 18:33:17

MongoRepository的相关文章

MongDB .Net工具库MongoRepository的简单使用

MongDB .Net工具库MongoRepository的简单使用 最近研究了一下MongoDB数据库,并使用了开源的在.net环境下的一个类库,Mongo仓库.对于数据的一些简单的操作非常好用,特记录供后期参考. 具体的使用过程如下: 一.新建项目,在Nuget上获取库. 二.在配置文件中设置数据库地址 三.新建数据实体,并继承Entity,定义需要的字段 四.注意常见的几种字段属性的使用 [BsonElement("reName")]   用来重命名数据库中字段的名称. [Bso

spring-data-mongodb中的MongoTemplate与MongoRepository

(一).Spring Data 概述 Spring Data : Spring 的一个子项目.用于简化数据库访问,支持NoSQL 和 关系数据存储.其主要目标是使数据库的访问变得方便快捷. ● SpringData 项目所支持 NoSQL 存储: MongoDB (文档数据库)Neo4j(图形数据库)Redis(键/值存储)Hbase(列族数据库) ● SpringData 项目所支持的关系数据存储技术: JDBCJPA ● SpringData 方法定义规范: 1. 不是随便声明的,而需要符合

SpringData,JPA,MongoDB,Solr,Elasticsearch底层逻辑关系

一: Spring-data底层的接口路基: spring-data : PagingAndSortingRepository-> CrudRepository-> Repository ,它是springdatajpa,solr,mongoDB,Elasticsearch的核心基础. 有三个主要的接口: 1. Repository<T, ID> {}空接口 2.CrudRepository<T, ID>extends Repository<T, ID> 主

springboot学习笔记-3 整合redis&amp;mongodb

一.整合redis 1.1 建立实体类 @Entity @Table(name="user") public class User implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private

MongoDB学习笔记~为IMongoRepository接口添加了排序和表达式树,针对官方驱动

MongoDB的官方驱动,语法更好,更强 之前写过关于IMongoRepository仓储的文章,在mongodb的驱动选择上使用了NoRM,但是进行$ref引用类型导航时出现了问题,它对引用类型属性支持不是很好,还是使用几年前的泛型技术而没有使用Attribute,在这个方面官方驱动做的更好,所以,我还是使用官方驱动又实现了一次IMongoRepository,把一些实现的细节封装在了底层,我们叫这个官方仓储为MongoOfficialRepository,呵呵,谁叫你来的晚呢,MongoRe

Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多"开箱即用"的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内藏玄机 Spring Boot提供了很多"开箱即用"的依赖模块,都是以spring-boot-starter-xx作为命名的.例如,之前提到的 spring-boot-starter-redis.spring-boot-starter-data-mongodb.spri

springBoot-mongodb

作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置漏洞被攻击,数据被删,引起了人们的注意,感兴趣的可以看看这篇文章:场屠戮MongoDB的盛宴反思:超33000个数据库遭遇入侵勒索,同时也说明了很多公司生产中大量使用mongodb. mongo

springboot使用jpa+mongodb时,xxxRepository不能Autowired的问题

springboot启动类: @SpringBootApplication public class MainApp { public static void main(String[] args) { SpringApplication.run(MainApp.class, args); } } jpa数据库操作类: public interface UserDao extends MongoRepository<User, String> { } 单元测试类: @RunWith(Sprin

深入学习微框架:Spring Boot

由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理.在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian Colyer回应了这些批评,并且