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