CRL 2.3.0.0

  • CRL是一个面向对象的轻便型ORM业务框架

    • 数据处理使用了对象/数据映射,采用Lambda表达式来表示条件查询,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作
    • 数据连接以编程方式进行配置,支持多个库,多种数据库类型,参见Global.asax中实现,首次使用请更改LocalSqlHelper.CreateDbHelper中数据连接
    • 通过业务对象封装继承,实现业务重用性,比较常用的封装有,会员/账户系统,字典配置,分类系统,在线支付,订单/购物车,权限验证/菜单系统等等,当然也可以写自已的业务封装
  • 开发效率:不需要额外工具生成,不需要繁琐的拼接字符串,通过代码复用,大大提高开发速度
  • 运行效率:在对象映射上作了缓存处理,查询效率几乎等于手写SQL效率,注:CRL对象查询默认是 with(nolock)
  • 缓存支持:光操作数据,没缓存怎么能行? 通过对象缓存绑定,很轻松实现缓存创建和调用
    通过内置分布式解决方案,轻松实现分布式缓存服务
  • 数据安全:所有标准查询都经过参数化处理,无注入风险
  • 动态编译:数据表自动创建/动态存储过程支持与查询转换,极大减少了数据库维护工作,增加开发效率
  • 关联支持:2.2版支持多表关联查询,返回两种结果,供不同场景使用,见[关联查询]示例
特点详细示例:
  • 新的开发模式(CodeFirst)

    • 传统开发需先设计表,再设计对象,CRL省略的这一步,直接设计对象,对象为主,数据表为辅,更符合面象向对象的开发模式
    • 无需额外工具生成实体类,按标准方式写即可,即写即用,运行后自动创建对象对应数据表
    • 新增加的对象属性也不用上数据库维护了,它会自动进行检查创建
  • 调用简单 通过表达式查询转换为等效SQL语法,如: 
        继承实现业务类
    public class OrderManage : CRL.Order.OrderBusiness
    对象操作不再需要传入T对象类型
    var order = OrderManage.Instance.QueryItem(b=>b.Id==1 && b.UserId==2);
    等效为
    select * from Order where id=1 and UserId=2
    更新删除同理
  • 业务封装控制 数据访问对象不会直接暴露在外面,需要通过业务类才能实现操作,通过这个约束,限定业务必须在类务类实现,达到封装的目的
        public bool TransactionTest(out string message)
    {
    message = "";
    var helper = dbHelper;
    helper.BeginTran();
    try {
    helper.Delete(b => b.Id == 1);
    var item = new Code.ProductData() { InterFaceUser = "2222", ProductName = "product2", BarCode = "" };
    helper.InsertFromObj(item);
    helper.CommitTran();
    message = "事务已提交";
    return true; }
    catch(Exception ero) { message = ero.Message + " 事务已回滚"; helper.RollbackTran(); }
    return false;
    }
  • 缓存绑定 对任意基本查询可作数据缓存处理,设置过期时间后自动更新缓存,或直接创建当前对象数据缓存
        var query = Code.ProductDataManage.Instance.GetLamadaQuery();//创查完整查询
    query = query.Where(b => b.Id < 700);
    int exp = 10;//过期分钟
    var list = Code.ProductDataManage.Instance.QueryList(query, exp);//返回一个查询缓存,条件不一样,缓存也不一样
    调用对象数据缓存
    var list = Code.ProductDataManage.Instance.QueryFromAllCache(b => b.Id < 700);//在内部缓存数据中查找
  • 动态编译(仅MSSQL) 将任意查询/更新/删除操作自动编译为数据库等效存储过程,大大提高运行效率
        var query = Code.ProductDataManage.Instance.GetLamadaQuery();
    query = query.Where(b => b.Id < 700);
    string name = Request["name"];
    query = query.Where(b => b.InterFaceUser == name);
    var list = Code.ProductDataManage.Instance.QueryList(query, compileSp: true);
    将会创建并调用等效存储过程
    CREATE PROCEDURE [dbo].[ZautoSp_6B517FF62BDE99E6]
    (@id0 nvarchar(500),@InterFaceUser1 nvarchar(500))
    AS set nocount on
    select t1.[AddTime],t1.[BarCode],t1.[CategoryName],t1.[Id],t1.[InterFaceUser],t1.[Number],
    t1.[ProductChannel],t1.[ProductId],t1.[ProductName],t1.[PurchasePrice],t1.[SoldPrice],
    t1.[Style],t1.[SupplierId],t1.[SupplierName],t1.[TransType]
    from ProductData t1 with(nolock) where (t1.Id<@Id0) and InterFaceUser=@InterFaceUser1
  • 继承使用业务封装 通过继承对象或业务类型,调用内置业务封装或实现自已的业务封装,增加开发效率
        var user = new User(){Name="test"};
    UserManage.Instance.Login(user,"user",false);//实现Form验证登录,并设定票据
  • 多数据库支持 通过实现数据库适配器,实现多数据库支持,详见"支持数据库详细"
支持数据库详细:
数据库 基本查询 自动创建表 with(nolock)查询 批量插入 存储过程 动态编译存储过程 自带业务封装 备注
MSSQL 支持 支持 支持 支持 支持 支持 支持 需创建分页sp_page_MSSql.sql 存储过程
MySQL 支持 支持 不支持 不支持 支持 不支持 支持 需创建分页sp_page_MySql.sql 存储过程
ORACLE 支持 支持(需高级权限) 不支持 不支持 支持 不支持 部份支持 需创建分页sp_page_ORACLE.sql 存储过程
动态执行脚本 sp_ExecuteScript_ORACLE.sql
.Net Framework 4以上
建议配合MVC使用,面向对象开发会省很多事

CRL在线文档

CRL开发框架发布2.2版的更多相关文章

  1. .NET开源快速开发框架Colder发布 (NET452+AdminLTE版)

    .NET开源快速开发框架Colder(NET452+AdminLTE版) 引言 半年前将基于Easyui的快速开发框架开源,三个版本(NET4.52,NETCore和NET4.0)总共荣获200+星, ...

  2. 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. 【转载】.NET开源快速开发框架Colder(NET452+AdminLTE版)

    .NET开源快速开发框架Colder(NET452+AdminLTE版) 简介 本框架旨在为.NET开发人员提供一个Web后台快速开发框架,采用本框架,能够极大的提高项目开发效率. 本版本框架采后端采 ...

  4. 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误

    非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...

  5. 基于Mono跨平台移动应用开发框架发布Xamarin 3.0

    跨平台移动应用开发框架Xamarin可以让你完全用C#编写你的应用程序,在iOS.Android.Windows Phone 8.Windows8和mac平台上共享相同的代码.你可以重用你最喜欢的.N ...

  6. 如何发布使用LGPL版Qt的商业软件

    最近做跨平台图形用户界面库选型,权衡很多因素后最终选择了Qt,其中一个重要因素就是Qt使用LGPL授权许可.由于本人对LGPL理解有限,始终对闭源商业软件如何发布Qt库存在疑问,其中最关心的是:发布的 ...

  7. 微博发布效果jq版

    大家都看过新浪微博的发状态功能,我模拟了一下类似的效果,包括发布时间,删除效果等.代码如下: <!DOCTYPE HTML> <html> <head> <m ...

  8. Mditor 发布「桌面版」了 - http://mditor.com

    简单说明 Mditor 最早只有「组件版」,随着「桌面版」的发布,Mditor 目前有两个版本: 可嵌入到任意 Web 应用的 Embed 版本,这是一桌面版的基础,Repo: https://git ...

  9. 【开源】OSharpNS,轻量级.net core快速开发框架发布

    OSharpNS简介 OSharp Framework with .NetStandard2.0(OSharpNS)是OSharp的以.NetStandard2.0为目标框架,在AspNetCore的 ...

随机推荐

  1. Ubuntu Java 环境变量

    方法1:修改/etc/profile 文件所有用户的 shell都有权使用这些环境变量<1>在 shell终端执行命令:vi /etc/profile<2>在 profile文 ...

  2. notepad++崩溃后文件内容变为NUL的解决方法

    毫无疑问,notepad++是一款非常优秀的文本编辑器,但是notepad++有时候会崩溃,之后文件内容就会全部变成NUL 当你打文件看到自己辛辛苦苦的成果全都变成NUL是不是有想哭的感觉?" ...

  3. CSS3总结

    1.圆角效果 border-radius: 1px 1px 1px 1px; /* 四个半径值分别是左上角.右上角.右下角和左下角.顺时针 */  右边半圆 div.right-circle{ hei ...

  4. Unity3D 脚本手册

    1.private Ray ray;  --定义射线 ray = Camera.main.ScreenPointToRay(Input.mousePosition);  --摄像机发出的射线投射鼠标到 ...

  5. linux下Vim的使用

    在vim中移动光标跟其他的编辑器中有很大的区别,不过一旦学会了,就会飞速的在文本中移动 复制粘贴dd 删除光标所在行dw 删除一个字(word)x 删除当前字符X 删除前一个字符D 删除到行末yy 复 ...

  6. Kafka设计解析(一)- Kafka背景及架构介绍

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  7. 平凡的KTV后台,不平凡的KTV数据

    之前就是说过“一个项目有很多重要的步骤以及功能”,那我们现在就来看看对于KTV项目来说:后台是处于什么样的重要作用! 首先就得了解KTV后台的一些功能了: 1.歌曲管理 .歌手管理 .设置资源路径 2 ...

  8. php报表使用

    php报表的使用: 1.到官网(http://jpgraph.net/)下载,建议下载jpgraph-3.0.7.tar.gz版本 2.解压后有两个文件夹 docportal:使用手册 src:报表核 ...

  9. MVC自定义分页(附表跳转页Loading提示)

    之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新分页,但是想直接用 ...

  10. (转载)开始iOS 7中自动布局教程(一)

    这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学 ...