轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有

新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了!

最近又好多人发各种框架,谁的好,用谁的?

个人意见,想标准和稳定,EF,NH就行了,要个性,选一款好用的轮子吧

个人开发的框架始终是高级玩具,学习的好东西,不要较真,欢迎下载此高级玩具,猛击底部GITHUB地址

历史版本3介绍 CRL快速开发框架开源完全转到Github

当前版本结构更改如下

一句话描述,非关系型数据库Mongodb能用CRL进行统一管理了,不用再写各种各样的实现

此功能依赖MongoDB官方驱动MongoDB.Driver

简单示例

对象定义MongoDBModel.cs

public class MongoDBModel:CRL.IModel
{
public MongoDBModel()
{
//保持唯一
Id = new Guid();
}
public Guid Id
{
get;
set;
}
public string OrderId
{
get;
set;
}
public int Status
{
get;
set;
}
}

管理类实现MongoDBTestManage

    public class MongoDBTestManage : CRL.BaseProvider<MongoDBModel>
{
public static MongoDBTestManage Instance
{
get { return new MongoDBTestManage(); }
}
}

数据连接创建

CRL.SettingConfig.GetDbAccess = (dbLocation) =>
{
//可按type区分数据库
var type2 = dbLocation.ManageType;
if (type2 == typeof(Code.MongoDBTestManage))
{
//实现MongoDB连接
return new CoreHelper.MongoDBHelper("mongodb://localhost:27017", "test2");
}
return WebTest.Code.LocalSqlHelper.TestConnection;
};

创建访问对象

var instance = Code.MongoDBTestManage.Instance;

插入数据

instance.Add(new Code.MongoDBModel() { OrderId = "1212", Status = DateTime.Now.Second });

函数Count统计

int count = instance.Count(b => b.Status >= 0);

Group

var query = instance.GetLambdaQuery();
//group
query.GroupBy(b => b.OrderId).Select(b => new { count = b.Status.SUM(), count2 = b.Status.COUNT() });
var list = query.ToDynamic();
foreach (var item in list)
{
var a = item.count;
var key = item.OrderId;
}

标准查询

除了代表SQL特性的语法和函数不支持,其它都支持

            var query2 = instance.GetLambdaQuery();
query2.Select(b => new { aa = b.Id, bb = b.Status });
query2.Where(b=>b.Status.In(1,2,3,4)&&b.OrderId.StartsWith("123"));//支持扩展方法
var result = query2.ToDictionary<Guid, int>();//返回字典
var result2 = query2.ToDynamic();//返回动态对象
var result3 = query2.ToList();//返回List<MongoDBModel>

更新删除和之前调用方式保持一致

由于MongoDB的特性,以下不能实现,调用可能会抛出异常

  • 关联查询
  • 关联删除
  • 关联更新
  • SQL语句查询
  • 事务
  • 存储过程
  • 自动编译
  • 部份SQL函数

测试用例见开发文档 /page/MongoDB.aspx

void TestMongoDB()
{
//依赖官方驱动MongoDB.Driver
//MongoDBTest.Test();
//return;
var instance = Code.MongoDBTestManage.Instance;
//插入
instance.Add(new Code.MongoDBModel() { OrderId = "1212", Status = DateTime.Now.Second });
//函数Count
int count = instance.Count(b => b.Status >= 0);
var query = instance.GetLambdaQuery();
query.Where(b => b.Status > 10);
var result3 = query.ToList();//返回List<MongoDBModel>
//group
query.GroupBy(b => b.OrderId).Select(b => new { count = b.Status.SUM(), count2 = b.Status.COUNT() });
var list = query.ToDynamic();
foreach (var item in list)
{
var a = item.count;
var key = item.OrderId;
}
//标准查询
var query2 = instance.GetLambdaQuery();
query2.Select(b => new { aa = b.Id, bb = b.Status });
//query2.Where(b=>b.Status.In(1,2,3,4));
var result = query2.ToDictionary<Guid, int>();//返回字典
var result2 = query2.ToDynamic();//返回动态对象 //删除
instance.Delete(b => b.Status == 111);
//更新
var item2 = instance.QueryItem(b => b.Status > 0);
item2.Status = 123;
instance.Update(item2);
}

  

项目开源地址:https://github.com/hubro-xx/CRL3

非关系型数据库来了,CRL快速开发框架升级到版本4的更多相关文章

  1. CRL快速开发框架升级到4.52,谈谈开发过程中的优化

    CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...

  2. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

  3. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架开源完全转到Github

    CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...

随机推荐

  1. 【Net跨平台第一步】逆天带你零基础Linux入门【更新完毕】

    部分讲义:(视频已删,后期以文档形式发布)

  2. C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(2)

    这篇文章是上篇的续集,本文将会继续介绍coreconsole.cpp里面的逻辑.也许大家会看一些CLR的书,我承认我没有看过,因为我觉得一个人,他再NB,那也是他自己的眼光,而且说句难听的,CLR也不 ...

  3. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

  4. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  5. TemplateMethod(模块方法模式)

    /** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...

  6. const let,console.log('a',a)跟console.log('a'+a)的区别

    const 创建一个只读的常量 let块级作用域 const let重复赋值都会报错 console.log('a',a) a console.log('a'+a) a2 逗号的值会有空格:用加号的值 ...

  7. 信息安全-1:python之playfair密码算法详解[原创]

    转发注明出处: http://www.cnblogs.com/0zcl/p/6105825.html 一.基本概念 古典密码是基于字符替换的密码.加密技术有:Caesar(恺撒)密码.Vigenere ...

  8. VS2015 Git 源码管理工具简单入门

    1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取 ...

  9. 进程监控工具supervisor 启动Mongodb

    进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...

  10. Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...