重构我的CMS系统,增加ORM


Web层,采用WebService + Ajax (支持Web,WAP)

Model实体层,略

SystemFramework层,主要是载入配置信息,资源文件等

CommonTools通用工具Util等类

BLL业务层------------------------------------------------------------------------------------------------------------------------

/// <summary>
 /// 逻辑业务层 User
 /// </summary>
 public class SysuserService
 {
        private static readonly ISysuser dal = DataAccess.CreateSysuser();

  #region  成员方法

        public SysuserService()
  {}

  /// <summary>
  /// 增加一条数据
  /// </summary>
        public bool Save(Yesun.Model.Sysuser model)
  {
   return dal.Save(model);
  }

  /// <summary>
  /// 修改一条数据
  /// </summary>
        public bool Update(Yesun.Model.Sysuser model)
  {
   return dal.Update(model);
  }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public Yesun.Model.Sysuser GetModel(Guid id)
        {
            return dal.GetModel(id);
        }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public Yesun.Model.Sysuser GetModel(string id)
        {
            return dal.GetModel(new Guid(id));
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList()
        {
            return dal.GetList("", "", "", "", 1, -1);
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(int pageid, int pagesize)
        {
            return dal.GetList("", "", "", "", pageid, pagesize);
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string where, int pageid, int pagesize)
        {
            return dal.GetList("", "", "", where, pageid, pagesize);
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string field, string where, int pageid, int pagesize)
        {
            return dal.GetList("", field, "", where, pageid, pagesize);
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public Yesun.Model.SqlPage<Yesun.Model.Sysuser> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize)
        {
            return dal.GetList(pk, fields, sort, where, pageid, pagesize);
        }

  /// <summary>
  /// 删除N条数据
  /// </summary>
  public bool Delete(string delid)
  {
   return dal.Delete(delid);
  }

  #endregion  成员方法
 }

DAL层,最核心的----------------------------------- --------------加入泛型,ORM-------------------------------------------------- -------------------------------------------------------------

namespace Yesun.SqlDAL
{
 /// <summary>
 /// 通用数据访问类
 /// </summary>
    public class DAL<T> : IDAL<T>
 {
  #region  成员方法

        private readonly ObjectMapHelper<T> objectMapHelper = new ObjectMapHelper<T>();
        private TableMap tableMap;
        private List<FieldMap> arrFieldMap;
        public DAL()
  {
            tableMap = objectMapHelper.GetTableMap();
            arrFieldMap = objectMapHelper.GetFieldMap();
        }

  /// <summary>
  /// 增加一条数据
  /// </summary>
  public bool Save(T t)
  {
            //存储过程模式
            StringBuilder cmdText = new StringBuilder("usp_"+ tableMap.TableName +"_Save");
            cmdText.Append(" ");//必须
            object[] cmdParams = new object[arrFieldMap.Count];
            int i = 0;
            foreach (FieldMap field in arrFieldMap)
            {
                if (i == arrFieldMap.Count - 1)
                    cmdText.Append("@" + field.Column);
                else
                    cmdText.Append("@" + field.Column + ",");

                cmdParams[i] = t.GetType().GetProperty(field.MemberName).GetValue(t, null);
                i++;
            }
            if (SqlDataBase.ExecuteNonQuery(CommandType.StoredProcedure, cmdText.ToString(), cmdParams) > 0)
                return true;
            else
                return false;
        }

  /// <summary>
  /// 修改一条数据
  /// </summary>
  public bool Update(T t)
  {
            //存储过程模式
            StringBuilder cmdText = new StringBuilder("usp_" + tableMap.TableName + "_Update");
            cmdText.Append(" ");//必须
            object[] cmdParams = new object[arrFieldMap.Count];
            int i = 0;
            foreach (FieldMap field in arrFieldMap)
            {
                if (i == arrFieldMap.Count - 1)
                    cmdText.Append("@" + field.Column);
                else
                    cmdText.Append("@" + field.Column + ",");

                cmdParams[i] = t.GetType().GetProperty(field.MemberName).GetValue(t, null);
                i++;
            }
            if (SqlDataBase.ExecuteNonQuery(CommandType.StoredProcedure, cmdText.ToString(), cmdParams) > 0)
                return true;
            else
                return false;
  }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public T GetModel(Guid id)
        {
            T t = System.Activator.CreateInstance<T>();//创建实例
            DataTable dt = SqlDataBase.ExecuteDataTable(CommandType.StoredProcedure, "usp_" + tableMap.TableName + "_GetByID @id", id);
            if (dt.Rows.Count == 0)
                return default(T);
            t = objectMapHelper.DataTableToObject(dt)[0];
            return t;
        }
       
  /// <summary>
  /// 获得数据列表
  /// </summary>
        public Yesun.Model.SqlPage<T> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize)
  {
            SqlPage<T> sqlpage = new SqlPage<T>();
            string primaryKey = objectMapHelper.GetPrimaryKey();

            if (pageid < 1) pageid = 1;
            if (pagesize < 0) pagesize = 1000000;
            if (pk == null || pk == "") pk = primaryKey;
            if (fields == null || fields == "")
            {
                foreach (FieldMap field in arrFieldMap)
                {
                    fields += field.Column + ",";
                }
            }
            if (fields.EndsWith(","))
                fields = fields.Remove(fields.Length - 1);
            if (sort == null || sort == "") sort = primaryKey;

            DataTable dt = new DataTable();
            SqlParameter[] parms = new SqlParameter[]{
              new SqlParameter("@PKs",SqlDbType.NVarChar,100),
              new SqlParameter("@Tables",SqlDbType.NVarChar,100),
              new SqlParameter("@Fields",SqlDbType.NVarChar,500),
              new SqlParameter("@Sort",SqlDbType.NVarChar,100),
              new SqlParameter("@Where",SqlDbType.NVarChar,4000),
              new SqlParameter("@CurrentPage",SqlDbType.Int),
              new SqlParameter("@PageSize",SqlDbType.Int),
              new SqlParameter("@RecordCount",SqlDbType.Int)
               };
            parms[0].Value = pk;
            parms[1].Value = tableMap.TableName;
            parms[2].Value = fields;
            parms[3].Value = sort;
            parms[4].Value = where;
            parms[5].Value = pageid;
            parms[6].Value = pagesize;
            parms[7].Direction = ParameterDirection.Output;

            dt = Yesun.DbUtility.SqlHelper.ExecuteDataset(Yesun.DbUtility.DbConfig.ConnectionString, CommandType.StoredProcedure, "USP_GetListByPage", parms).Tables[0];
            sqlpage.oList = objectMapHelper.DataTableToObject(dt);
            sqlpage.RecordCount = (int)parms[7].Value;
            if (sqlpage.RecordCount % pagesize == 0)
                sqlpage.RecordPage = sqlpage.RecordCount / pagesize;
            else
                sqlpage.RecordPage = (int)Math.Ceiling((double)sqlpage.RecordCount / pagesize);

            return sqlpage;

  }

  /// <summary>
  /// 删除N条数据
  /// </summary>
  public bool Delete(string delid)
  {
            //GUID删除和INT型删除不相同
            delid = delid.Replace(",", "','");
            string SQL = "DELETE FROM "+ tableMap.TableName +" WHERE id IN ('" + delid + "')";
            if (SqlDataBase.ExecuteNonQuery(CommandType.Text, SQL, null) > 0)
                return true;
            else
                return false;
  }

  #endregion  成员方法
 }
}

Sysuser数据库操作,继承DAL,自己可以扩展其他数据库操作,继承接口中的默认4种数据库操作

namespace Yesun.SqlDAL
{
 /// <summary>
 /// 数据访问类User
 /// </summary>
 public class Sysuser : DAL<Yesun.Model.Sysuser> , ISysuser
 {
 }
}

IDAL层--------------------------------------- ------------------------------------------------------------------------------------------------------------------

namespace Yesun.IDAL
{
    /// <summary>
    /// 接口层IDAL, 通用方法, 范型
    /// </summary>
    public interface IDAL<T>
    {
     #region  成员方法

     /// <summary>
     /// 增加一条数据
     /// </summary>
     bool Save(T t);

     /// <summary>
     /// 修改一条数据
     /// </summary>
     bool Update(T t);

     /// <summary>
     /// 得到一个对象实体
     /// </summary>
     T GetModel(Guid id);

     /// <summary>
     /// 获得数据列表
     /// </summary>
     Yesun.Model.SqlPage<T> GetList(string pk, string fields, string sort, string where, int pageid, int pagesize);

     /// <summary>
     /// 删除N条数据
     /// </summary>
     bool Delete(string delid);

     #endregion  成员方法
    }
}

ISysuser.cs基层IDAL,方便自行扩展

/// <summary>
 /// 接口层ISysuser 的摘要说明。
 /// </summary>
 public interface ISysuser : IDAL<Yesun.Model.Sysuser>
 {
 }

DALFaction工厂-------------------------------- -----------------------------------------------------------------------------------------------------------------

public sealed class DataAccess
 {
        private static readonly string path = ConfigurationManager.AppSettings["DAL"];
  /// <summary>
  /// 创建对象或从缓存获取
  /// 注意:如果这里反射不成功,请分析下面原因:1.每一层是否是独立的程序集 2.请检查数据层是否实现了接口 3.请检查程序集名称和命名空间不一致,右键DAL项目,察看程序集名称和名字空间是否为YESUN.DAL格式
  /// </summary>
  public static object CreateObject(string path,string CacheKey)
  {
   System.Web.Caching.Cache objCache = System.Web.HttpRuntime.Cache;
   object objType = objCache[CacheKey];
   if (objType == null)
   {
    try
    {
     objType = Assembly.Load(path).CreateInstance(CacheKey);
     objCache.Insert(CacheKey, objType);// 写入缓存
    }
    catch(Exception ex)
    {
                    //记录错误日志
                    Console.Write(ex.Message);
                    Console.Write(ex.StackTrace);
                }
   }
   return objType;
  }
        /// <summary>
        /// 创建cms_admin数据层接口
        /// </summary>
        public static Yesun.IDAL.ISysuser CreateSysuser()
        {
            string CacheKey = path + ".Sysuser";
            object objType = CreateObject(path, CacheKey);
            return (ISysuser)objType;
        }
    }

DbUtility,ORM略。。。







原文地址:https://www.cnblogs.com/yesun/p/674112.html