非关系型数据库来了,CRL快速开发框架升级到版本4
轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有
新版数据查询作了些调整,抽象了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的更多相关文章
- CRL快速开发框架升级到4.52,谈谈开发过程中的优化
CRL4.5版本已经稳定使用于目前的几个中型项目中,在实际使用中,也发现了不少问题,这些问题都在4.52中提交 CRL具体功能和使用请浏览 CRL快速开发框架系列教程 由于现在项目是一套业务系统,查询 ...
- CRL快速开发框架升级到3.1
CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程五(使用缓存)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架开源完全转到Github
CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...
随机推荐
- NuGet镜像上线试运行
为解决国内访问NuGet服务器速度不稳定的问题,我们用阿里云服务器搭建了一个NuGet镜像,目前已上线试运行. 使用NuGet镜像源的方法如下: 1)NuGet镜像源地址:https://nuget. ...
- Web性能优化:图片优化
程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- 分治法求解最近对问题(c++)
#include"stdafx.h" #include<iostream> #include<cmath> #define TRUE 1 #define F ...
- css中的浮动与三种清除浮动的方法
说到浮动之前,先说一下CSS中margin属性的两种特殊现象 1, 外边距的合并现象: 如果两个div上下排序,给上面一个div设置margin-bottom,给下面一个div设置margin-top ...
- 客户端的验证插件validator
简单,智能,令人愉悦的表单验证~~~ 官方文档:http://www.niceue.com/validator/ <!DOCTYPE html> <html> <head ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- Flexible 弹性盒子模型之CSS flex-basis 属性
实例 设置第二个弹性盒元素的初始长度为 80 像素: div:nth-of-type(2){flex-basis:80px;} 效果预览 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本 ...
- 如何通过Git GUI将自己本地的项目上传至Github
最近在学习node.js和react,顺便复习了下AngluarJS相关的东西,写了些小demo想放在GitHub上,之前仅限于只申请了GitHub账号从没用过,今天花半天时间查资料认真学习Githu ...
- hexo+github搭建个人博客
最近用hexo+github搭建了自己的个人博客-https://liuyfl.github.io,其中碰到了一些问题,记录下来,以便查阅. hexo+github在win7环境下搭建个人博客:hex ...