ORM組件LogORM使用指北
- 2019 年 10 月 3 日
- 筆記
LogORM是一個對數據庫進行對象關係映射的ORM組件。當對數據庫進行增刪改操作時,組件會自動進行日誌記錄。 該組件支持.Net平台和.NetCore平台,支持SQL Server、Oracle、MySQL數據庫,可以方便地擴展到其他數據庫。 使用該組件,可以顯着地減少開發人員在數據庫訪問和日誌記錄上的代碼工作量,使得開發人員集中精力來實現他們的業務邏輯。
使用本組件,可以在同一個項目中訪問不同的數據庫類型的不同數據庫,例如可以同時訪問Sql Server的DB1/DB2、Oracle數據庫的DB3/DB4、MySql數據庫的DB5/DB6等6個數據庫的數據。
一、使用方法
本組件是基於Log2Net的,因此使用方法類似於Log2Net。
1 引用組件
在VS開發工具的nuget中,搜索 LogORM 組件安裝即可。
我也是醉了,log4net還是出現在第一位,第二個才是我們所要的。但是,搜索全大寫的 LOGORM,終於讓LogORM出現在第一個,??
猜猜看,nuget使用了神馬搜索匹配算法?
我們也可以通過Nuge官網來下載和安裝: https://www.nuget.org/packages/LogORM/ 。但建議使用VS工具的nuget來安裝。
2 日誌組件Log2Net的註冊
因為本組件中的日誌記錄是通過Log2Net來實現的,因此需要註冊該日誌組件,同樣是在應用程序初始化的地方,調用 LogApi.RegisterLogInitMsg(SysCategory sys, object applicationObj = null, UserCfg userConfig = null, Dictionary<SysCategory, string> webAppName = null, bool bWriteStartLog = true, bool bLogMonitor = true);各參數含義參見 日誌組件Log2Net的介紹和使用(附源碼開源地址)一文中的介紹。
若不需要使用本組件自帶的日誌記錄功能,則可以不註冊Log2Net組件。
3 日誌組件的配置
在網站項目下,添加 Log2NetCfg.config 文件,在該文件中進行Log2Net組件的配置,在web.config文件中進行Log2Net模塊聲明和日誌數據庫連接字符串等。具體配置介紹參見 日誌組件Log2Net的介紹和使用(附源碼開源地址)一文。
若不需要使用本組件自帶的日誌記錄功能,則可以不配置Log2Net組件。
4 數據庫實體的數據庫訪問方法定義
就是繼承本組件中定義的LogORMBaseDal方法,重寫該數據庫表中的相關參數。例如 Log_OperateTrace 為數據庫中中Log_OperateTrace表的實體類定義,則數據庫訪問方法定義如下:

1 public class Log_OperateTraceAdoDal : LogORMBaseDal<Log_OperateTrace> 2 { 3 protected override CurrentDalParas CurDalParas 4 { 5 get 6 { 7 return new CurrentDalParas() 8 { 9 CurDatabaseType = DBStoreType.SqlServer, 10 DBConStringKey = "logTraceSqlStr", 11 TableName = "Log_OperateTrace", 12 PrimaryKey = "Id", 13 SkipCols = new string[] { "Id" }, 14 Orderby = "Id", 15 }; 16 } 17 } 18 }
View Code
參考該方法,定義其他的數據庫訪問方法。
5 調用數據庫訪問方法,訪問數據庫。
舉例如下:

1 var curDal = new Log_OperateTraceAdoDal(); 2 DBOperUser dbUser = new DBOperUser() { UserId = "CNNO2", UserName = "李大大" }; 3 4 #region 測試獲取數據 5 var dbData = curDal.GetAll(new LogORM.Models.PageSerach<Log_OperateTrace>() 6 { 7 Filter = a => a.Id > 0, 8 OrderBy = a => a.OrderByDescending(m => m.LogTime), 9 PageSize = 2 10 }); 11 var dbModels = DtModelConvert<List<Log_OperateTrace>>.DeepClone(dbData.ExeModel); 12 var selectModels = dbModels.ConvertAll(a => (object)a); 13 #endregion 測試獲取數據
View Code
具體請參見 源碼中 LogORMWeb_net45 項目和 LogORMWeb_DNC項目中 HomeController控制器中的方法。
二、LogORM組件中定義的方法
前文介紹了使用方法,那麼,使用該組件,可以使用那些方法呢?就是數據庫的增刪改查等方法。

1 //添加一個實體 2 ExeResEdm Add(AddDBPara<T> dBPara, DBOperUser dbLogMsg = null); 3 4 //批量添加實體 5 ExeResEdm Add(List<T> list, DBOperUser dbLogMsg = null); 6 7 //根據字段更新 8 ExeResEdm Update(Dictionary<string, object> whereParas, Dictionary<string, object> updateFDList, DBOperUser dbLogMsg = null); 9 10 //根據字段更新實體 11 ExeResEdm Update(T model, List<string> whereParas, DBOperUser dbLogMsg = null); 12 13 //批量更新 14 ExeResEdm Update(List<T> list, List<Dictionary<string, string>> updateFDList, DBOperUser dbLogMsg = null, string strComFields = "*"); 15 16 //批量進行添加/更新/刪除 17 ExeResEdm AddUpdateDelete( DBOperUser dbLogMsg = null, params AddUpdateDelEdm[] models); 18 19 //根據id軟刪除 20 ExeResEdm Delete(object id, DBOperUser dbLogMsg = null); 21 22 //刪除某個實體 23 ExeResEdm Delete(T model, DBOperUser dbLogMsg = null); 24 25 //根據字段刪除 26 ExeResEdm Delete(Dictionary<string, object> whereParas, DBOperUser dbLogMsg = null); 27 28 29 //根據id軟刪除 30 ExeResEdm SoftDelete(object id, DBOperUser dbLogMsg = null); 31 32 //軟刪除某個實體 33 ExeResEdm SoftDelete(T model, DBOperUser dbLogMsg = null); 34 35 //根據條件軟刪除 36 ExeResEdm SoftDelete(Dictionary<string, object> whereParas, DBOperUser dbLogMsg = null); 37 38 //執行Sql語句 39 ExeResEdm ExecuteNonQuery(string cmdText,DBOperUser dbLogMsg = null, params DbParameter[] parameters); 40 41 //執行ExecuteScalar語句 42 ExeResEdm ExecuteScalar(string cmdText, DBOperUser dbLogMsg = null, params DbParameter[] parameters); 43 44 //執行存儲過程 45 ExeResEdm ExecuteStoredProcedure(string storedProcedureName, DBOperUser dbLogMsg = null, params DbParameter[] parameters); 46 47 //執行事務 48 ExeResEdm ExecuteTransaction(List<SqlContianer> ltSqls, DBOperUser dbLogMsg = null); 49 50 //獲取分頁數據 51 ExeResEdm GetAll(PageSerach<T> para, DBOperUser dbLogMsg = null); 52 53 //獲取DataSet數據 54 ExeResEdm GetDataSet(List<SqlContianer> ltSqls, DBOperUser dbLogMsg = null); 55 56 //獲取DataSet數據 57 ExeResEdm GetDataSet(string cmdText, DBOperUser dbLogMsg = null, params DbParameter[] parameters); 58 59 //獲取一個數據表的表結構 60 ExeResEdm SelectDBTableFormat( DBOperUser dbLogMsg = null ,string strField = "*"); 61 62 //獲取查詢的SQL語句 63 CRUDSql GetSelectSql(T searchPara, List<string> selectFields = null); 64 65 //獲取插入的SQL語句 66 CRUDSql GetInsertSql<M>(M model, string tableName, bool bParameterizedQuery); 67 68 //檢查指定條件的數據是否存在 69 ExeResEdm Exist(Dictionary<string, object> whereParas, DBOperUser dbLogMsg = null); 70 71 //檢查某個實體是否存在 72 ExeResEdm Exist(T model, DBOperUser dbLogMsg = null);
View Code
例如,需要批量增加刪除修改數據,則可以使用 AddUpdateDelete 方法,批量獲取多個表的數據,則可以使用 GetDataSet 方法。
三、項目開源地址
本組件已開源,項目地址為 https://github.com/yuchen1030/LogORM 。建議使用的VS工具為VS2017。當然,如果你只是使用該組件,隨便你使用VS2012,VS2013,VS2015等工具。
擯棄繁冗重複的數據訪問層代碼,使用LogORM愉快地編程吧???