持久层添加对MangoDB数据库的支持

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CJCMS.Data;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
using System.Linq.Expressions; namespace CJCMS.Data
{
public class MangoDBRepository<T> : IRepository<T> where T : IEntity
{ MongoCollection<T> _session = null; public MangoDBRepository()
{
//读配置
string connectionString = "mongodb://localhost"; MongoClient client = new MongoClient(connectionString); var server = client.GetServer(); //读配置
var database = server.GetDatabase("test"); //获取T的名称
_session = database.GetCollection<T>("tableName");
} public void Add(T entity)
{
_session.Insert(entity);
} public IQueryable<T> Table { get { return _session.AsQueryable<T>(); } } public void Update(T entity)
{
_session.Save(entity);
} public void Save(T entity)
{
_session.Save(entity);
} public void Delete(T entity)
{
var query = Query<T>.EQ(e => e.Id, entity.Id);
_session.Remove(query);
} public void Delete(string id)
{
var query = Query<T>.EQ(e => e.Id, id);
_session.Remove(query);
} public T GetByKey(string id)
{
var query = Query<T>.EQ(e => e.Id, id);
T t = _session.FindOneAs<T>(query);
return t;
} public int Count(Expression<Func<T, bool>> predicate)
{
return Table.Count(predicate);
} private IQueryable<T> FetchQuery(Expression<Func<T, bool>> predicate)
{
return Table.Where(predicate);
} private IQueryable<T> FetchQuery(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order, out string OrderName)
{
var orderable = new Orderable<T>(FetchQuery(predicate));
order(orderable);
OrderName = orderable.OrderName;
return orderable.Queryable;
} public IList<T> Fetch(Expression<Func<T, bool>> predicate)
{
object t = null; if (t == null)
{
t = FetchQuery(predicate).ToList();
return (IList<T>)t;
}
else
{
return (IList<T>)t;
}
} public IList<T> Fetch(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order)
{
object t = null;
string key = string.Empty;
IQueryable<T> q = FetchQuery(predicate, order, out key);
if (t == null)
{
t = q.ToList();
return (IList<T>)t;
}
else
{
q = null;
return (IList<T>)t;
}
} public IList<T> Fetch(Expression<Func<T, bool>> predicate, Action<Orderable<T>> order, int index, int count)
{
object t = null;
string key = string.Empty;
IQueryable<T> q = FetchQuery(predicate, order, out key); if (t == null)
{
t = q.Skip(index * count).Take(count).ToList(); return (IList<T>)t;
}
else
{
q = null;
return (IList<T>)t;
}
} public void Persist()
{ }
}
}

CJCMS系列--持久层对MangoDB的支持的更多相关文章

  1. Spring集成MyBatis持久层框架

    一.MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML ...

  2. MyBatis 是一款优秀的持久层框架

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  3. Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  4. 对spring 对持久层的支持和数据库连接池的理解

    1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...

  5. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  6. MyBatis知多少(7)持久层

    持久层是适合使用MyBatis的地方.在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取.在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其 ...

  7. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  8. .NET开源项目介绍及资源推荐:数据持久层

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  9. MyBatis持久层框架学习之01 MyBatis的起源和发展

    一.MyBatis的简介  MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...

随机推荐

  1. android Broadcast广播消息代码实现

    我用的是Fragment , 发送写在一个类中,接收写在另外一个类的内部类中.代码动态实现注册. 代码: myReceiver = new zcd.netanything.MyCar.myReceiv ...

  2. 前端少侠的ps故事

    前端少侠的ps故事 正所谓,码在江湖,身不由己.自21世纪前后端分离,代码分工细化以来,前端与设计的合作也变得越来越重要.有人说,如果前端懂设计的话,工作会更快一点.倘若说我入前端半年能算半个前端少侠 ...

  3. plain framework 商业版 开发总结1 updated

    每天对着不同的计划,多多少少有一种无形的压力.特别是对技术不好的我来说,过程中遇到的问题实在不少,时常纠结良久.时间慢慢流逝,最后虽然感觉有些不足,但是也不至于差强人意.商业版的PF核心已经升级到1. ...

  4. linux系统如何管理文件

    硬盘中的静态文件和inode(i节点) (1)文件平时都在存放在硬盘中的,硬盘中存储的文件以一种固定的形式存放的,我们叫静态文件. (2)一块硬盘中可以分为两大区域:一个是硬盘内容管理表项,另一个是真 ...

  5. python学习1

    1.由于win8的电脑上出现了0xc0000b错误不能解决,所以现在使用的是虚拟机中的Linux系统.安装过程见http://blog.csdn.net/yuzhongchun/article/det ...

  6. infer 检验IOS项目

    1.MAC安装infer:  brew install infer 2.设置环境变量指向安装infer/bin下 3.source .bash_profile 4.命令  infer -- xcode ...

  7. heredoc技术

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实 ...

  8. Ubuntu16.04下安装VS Code

    在Ubuntu下面安装Visual Studio Code sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get up ...

  9. Unity中脚本的执行顺序总结(@WhiteTaken)

    (Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...

  10. [LeetCode] Super Ugly Number 超级丑陋数

    Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...