C# 輕量級ORM 編寫思維


目標:

降低研發人員門檻,提高效率,去除重復引用DLL的工作,基礎配置由抽象工廠處理。

基礎擴展

 

/// <summary>
/// DataTable 轉換為List 集合
/// </summary>
/// <typeparam name="TResult">類型</typeparam>
/// <param name="dt">DataTable</param>
/// <returns></returns>
public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class,new()

 

/// <summary>
/// 轉換為一個DataTable
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value) where TResult : class

  

 

業務邏輯接口

//name:wujc 2013-06-20
namespace Yc.BLL
{
public class DataDomain : IDataService
{
private readonly IDataService dal = DataAccess.CreateService();
public DataDomain()
{ }
#region 成員方法
/// <summary>
/// 獲取表行數
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strWhere"></param>
/// <returns></returns>
public int GetRowsCount<T>(string strWhere) where T : BaseModel, new() { return dal.GetRowsCount<T>(strWhere); }

/// <summary>
/// 獲取表行數
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <returns></returns>
public int GetRowsCount(string sql) { return dal.GetRowsCount(sql); }

/// <summary>
/// 是否存在該記錄
/// </summary>
public bool Exists<T>(string id) where T : BaseModel, new() { return dal.Exists<T>(id); }

/// <summary>
/// 增加一條數據
/// </summary>
public bool Add<T>(T model) where T : BaseModel, new() { return dal.Add<T>(model); }

/// <summary>
/// 增加多條數據
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="modelList"></param>
/// <returns></returns>
public bool Add<T>(List<T> modelList) where T : BaseModel, new() { return dal.Add<T>(modelList); }

/// <summary>
/// 更新一條數據
/// </summary>
public bool Update<T>(T model) where T : BaseModel, new() { return dal.Update<T>(model); }

/// <summary>
/// 更新多條數據
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
public bool Update<T>(List<T> modelList) where T : BaseModel, new() { return dal.Update<T>(modelList); }

/// <summary>
/// 刪除一條數據
/// </summary>
public bool Delete<T>(string id) where T : BaseModel, new() { return dal.Delete<T>(id); }

/// <summary>
/// 刪除一條數據
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <returns></returns>
public bool Delete<T>(T model) where T : BaseModel, new() { return dal.Delete<T>(model); }

/// <summary>
/// 刪除多條數據
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
public bool Delete<T>(List<T> modelList) where T : BaseModel, new() { return dal.Delete<T>(modelList); }

/// <summary>
/// 批量刪除數據
/// </summary>
/// <param name="idList">逗號分隔</param>
/// <returns></returns>
public bool DeleteList<T>(string idList) where T : BaseModel, new() { return dal.DeleteList<T>(idList); }

/// <summary>
/// 得到一個對象實體
/// </summary>
public T GetModel<T>(string id) where T : BaseModel, new() { return dal.GetModel<T>(id); }

/// <summary>
/// 得到全部對象實體
/// </summary>
public List<T> GetModelList<T>(string strWhere) where T : BaseModel, new() { return dal.GetModelList<T>(strWhere); }

/// <summary>
/// 獲得數據列表
/// </summary>
public DataSet GetList<T>(string strWhere) where T : BaseModel, new() { return dal.GetList<T>(strWhere); }

/// <summary>
/// 獲得數據表
/// </summary>
public DataTable GetTable<T>(string strWhere) where T : BaseModel, new() { return dal.GetTable<T>(strWhere); }

/// <summary>
/// 根據分頁獲得數據列表
/// </summary>
public DataSet GetList<T>(string strWhere, string orderby, int startIndex, int endIndex) where T : BaseModel, new() { return dal.GetList<T>(strWhere, orderby, startIndex, endIndex); }

/// <summary>
/// 根據分頁獲得數據列表
/// </summary>
public DataSet GetListBySql(string sql, string orderby, int startIndex, int endIndex) { return dal.GetListBySql(sql, orderby, startIndex, endIndex); }

/// <summary>
/// 執行SQL語句,返回影響的記錄數
/// </summary>
/// <param name="SQLString">SQL語句</param>
/// <returns>影響的記錄數</returns>
public int ExecuteSql(string SQLString) { return dal.ExecuteSql(SQLString); }

/// <summary>
/// 執行查詢語句,返回DataSet
/// </summary>
/// <param name="SQLString">查詢語句</param>
/// <returns>DataSet</returns>
public DataSet Query(string SQLString) { return dal.Query(SQLString); }

/// <summary>
/// 執行多條SQL語句,實現數據庫事務。
/// </summary>
/// <param name="SQLStringList">SQL語句的哈希表(key為sql語句,value是該語句的SqlParameter[])</param>
public void ExecuteSqlTran(Hashtable SQLStringList) { dal.ExecuteSqlTran(SQLStringList); }
#endregion 成員方法

  

 

因為這還是個公司框架,還不能開源,不過看完以上接口定義之后,已經知道個大概了吧。

 

數據邏輯抽象工廠,由抽象接口層,根據配置創建抽象實例,還有緩沖池等。

 

數據邏輯基礎方法和接口

這些很基礎的,網上也一大把,我只是為了配合框架做了一些小修改。

 

 

接着,每創立一個新項目,都不需要重新再去重做一套orm 了, 引入以上所說的。

接着,新增一個Model層,值得主意的是,Model要繼承Yc.Base的BaseModel。

示例:

/// <summary>
    /// 用戶表
    /// </summary>
    [System.Serializable()]
    public class UserInfo : Yc.Base.BaseModel
    {
        /// <summary>
        /// 初始化
        /// </summary>
        public UserInfo()
        {
            this.TableUser = "test";
        }
        private System.String _userInfoId;

        /// <summary>
        /// 用戶Id,NVARCHAR2,128
        /// </summary>
        public System.String UserInfoId
        {
            get
            {
                return _userInfoId ==null? "":_userInfoId;
            }
            set
            {
                _userInfoId = value;
            }
        }        
        private System.String _name;

        /// <summary>
        /// 用戶名,NVARCHAR2,500
        /// </summary>
        public System.String Name
        {
            get
            {
                return _name ==null? "":_name;
            }
            set
            {
                _name = value;
            }
        }        
        private System.String _pwd;

        /// <summary>
        /// 用戶密碼,NVARCHAR2,500
        /// </summary>
        public System.String Pwd
        {
            get
            {
                return _pwd ==null? "":_pwd;
            }
            set
            {
                _pwd = value;
            }
        }        
    }

  

再引用你該項目的Model層

一切就這樣簡單,希望對大家了解orm有所幫助!

 

by:五加乘

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM