CRL开发框架发布2.2版


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在线文档

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM