LiteORM-For-DotNet,我的第一個開源庫
這是一個DotNet輕量級ORM框架,解決C#.Net開發過程中重複繁瑣的資料庫CURD操作。
前言
因工作中接手的.net專案,原始碼裡面都用了動軟程式碼生成的原始碼做為資料庫操作類庫。其中,有些根本就沒有用到,今後也不會用到的冗餘程式碼——垃圾程式碼。而每次如果有表結構修改,就得重新生成表實體/手動修改實體類,然後再修改程式碼中實體類邏輯,再修改DAL(資料庫訪問層)的賦值程式碼、sql欄位、資料型別。
於是,產生一個想法,借鑑EF的理念,利用反射技術,用表實體去操作資料庫,做增、改、刪、查處理。並且,將表實體類更精細化標註,增加了欄位名、主鍵、自增長、註釋【標題】、資料型別、長度的屬性標識,更有利於實體生成更優的sql指令碼。
由此,通過反射技術把所有表CUDR操作的統一處理,以前修改了表結構,就得更新表實體類、修改邏輯程式碼、修改DAL。現在,只需求更新表實體及對應的邏輯程式碼就可以,不用再去維護DAL程式碼,幹掉那些每個DAL層中70%的程式碼,達到精簡程式碼,提高開發效率的目的。
有了這個想法,便開始了冗長的擼程式碼,斷斷繼繼歷經兩個月的時間,終於完成了構想的雛形。然後,又花點時間去了解一下怎麼玩github,把原始碼庫傳到上面去。放出來,讓有需要的人拿去用,希望各位看官多多指教、發表意見,大家一起改進,完善。
下面奉上我的github地址,走過路過的都進來看看,給個Star就更好不過了。
詳情介紹
專案開源庫結構圖
1、YEasyModel
主要實體類反射類庫,定義實體類欄位的資料型別、長度、主鍵等特性;定義CURD方法,查詢引數表示式、排序表示式。利用lambda定義查詢邏輯,生成sql過濾條件;查詢/更新欄位定義,通過反射生成對應的Sql引數;排序邏輯定義,生成欄位排序規則;DataTable與實體類轉換方法。
2、ModelApp
winform程式,用於配置連線資料庫,定義名稱空間、實體類名,生成指定的表/檢視的實體模型;
3、WebDemo
Webapi範例,簡單的表實體模型使用說明;
(暫時先寫這些,後面有時間再完善)
效能
以下四種不同方式查詢資料庫記錄並轉為實體類的測試:
m1,DataSet實體表查詢記錄;
m2,YEasyModel實體類工具查詢記錄;
m3,三層工廠模式查詢記錄,例項化一次,後面從快取取得例項;
m4,Entity Framework查詢記錄;
查詢消耗的時間單位是毫秒。
第一次查詢1條記錄
第二次查詢1條記錄
第三次查詢1條記錄
第四次連續執行50次的查詢1條記錄
執行1次查詢8條記錄
連續執行50次的查詢8條記錄
根據以上多種測試結果對比得出:
m1 —— DataSet排第三;
m2 —— YEasyModel其次;
m3 —— 三層工廠模式最快,因為有例項化快取,第二次開始便不用再建立例項物件, 單條資料查詢時,速度優勢明顯。但需要維護的邏輯程式碼多;
m4 —— EF最慢,且劣勢明顯;太慢了!
總結
(有空再寫)
最後,奉上github地址:https://github.com/michaelyes/LiteORM-For-DotNet。