一个基于DataTable的后台框架的实现

如果谁对这个东西有兴趣,可以给我留言。源码奉上,初来乍到,大家捧捧场。

背景

公司做项目用的是Framework 2.0 ,经常开发的是基于webservice 的后台,使用传统的Sql方式,数据库不容易维护,使用ORM时,Webserive对自定义数据类型的支持个人感觉不是很好,装换效率低下,加上有些项目不是很大,用NHibernate显得有点重量级。于是,自己写了一个基于DataTable的分层框架,封装了事务,典型的增删改查,缓存(包括服务缓存和查询缓存)。

设计思路

该框架主要是基于DataTable进行构建,以DataTable作为标准数据接口来方便WebService的调用。封装了基本的增删改查和数据缓存功能。

使用方法

1 准备工作

1.1    将数据中每个表对应为程序中的实体,实体必须继承抽象类AbstractEntiy,并实现其抽象方法。基本格式如下:

    public class FZGL:AbstractEntiy //继承抽象实体

    {

        #region 字段

        public static string TableName = "FZGL";//定义改实体对应的数据库中表名字

 

        //定义一些常量字符串,为从数据库中的字段对应的在系统中的名字

        public static string FZID = "FZID";

        public static string FZMC = "FZMC";

        public static string FZSM = "FZSM";

        #endregion

 

        public FZGL(){

          

           //添加映射,第一个字符串是在系统中的列的名字,第二个是在数据库中列的名字

            filedMapping.AddWithOutError(FZID, "FZID");

            filedMapping.AddWithOutError(FZMC, "FZMC");

            filedMapping.AddWithOutError(FZSM, "FZSM");

        }

       

        //返回系统主键,暂时不支持多主键

        internal override string GetPrimaryKey()

        {

            return FZID;

        }

        //返回实体对应的数据表名字

        internal override string GetTableName()

        {

            return TableName;

        }

 

        internal override System.Collections.Generic.IList<string> GetUnUpdateColumns()

        {

            IList<String> unUpdateColumns =  new List<string>();

            //unUpdateColumns.Add();

            return unUpdateColumns;

        }

}

注:考虑到反射比较耗时,加上时间仓促,所以采用了自己设定,而不是由程序反射或特性来实现与数据库的映射

1.2    定义数据业务类,继承:EntiyBL

如下:

            public class XTFWBL : EntiyBL<XTFW>

             {

}

        至此,业务对象XTFWBL拥有了增删改查操作

2         使用

以查询“应用最新组件”为例

2.1    查询

        [WebMethod]

        public DataTable GetNewestCompant(string AppId)

        {

           //对大数据量对象或这频繁访问的数据对象做业务缓存,格式如下

          //业务缓存名格式: 命名空间+类目+方法名+“(”+每个参数值+“)”

            string cacheServiceName = "XTFWService.GetNewestCompant(" + AppId + ")";

            if (DataCache.ExistServiceCache(cacheServiceName))

            {

                return DataCache.GetServiceCache(cacheServiceName);

            }

 

            //调用Search方法查询对应的数据,条件格式为“条件1&&条件2||条件3”

            //找到系统所有的分组

            DataTable dtXTYFZLX = blXTYFZLX.Search(XTYFZLX.APP_ID + "=" + AppId);

            //找到分组所有的信息

            DataTable dtNewestZJ = null;

            foreach (DataRow row in dtXTYFZLX.Rows)

            {

                DataTable dtTempZJ = blZJGL.Search(ZJGL.FZID + "=" + row[XTYFZLX.FZID]);

                dtTempZJ.Merge(dtTempZJ, true, MissingSchemaAction.Add);

            }

 

            DataCache.SetServiceCache(cacheServiceName, dtNewestZJ);

            return dtNewestZJ;

        }

 

      注:blXTFW.SearchBySql(sql)//对于特殊的可以采用传递Sql语句,尽量不要用,否则更改数据库字段后难以维护

2.2    更新

XTFWBL blXTFW = new XTFWBL();

blXTFW.SaveOrUpdate(dtNeedUpdateOrSave);// dtNeedUpdateOrSave更改后的数据表,可自动判断是更新还是新增,从效率方向考虑,应该每次只传递更改后的数据行

2.3    删除

XTFWBL blXTFW = new XTFWBL();

blXTFW.Del(idStr);

idStr:要删除的行的行号,分号分割,格式:1;2;8

前台:

1 需要做的工作:

 

   新建对应实体: 格式如下

    /// <summary>

    /// 系统服务

    /// </summary>

    public class XTFW

{

    //这个字段和后台要对应

        #region 字段

        public const string TableName = "XTFW";

        public const string APP_ID = "APP_ID";

        public const string SERVERIP = "SERVERIP";

        public const string XT_ID = "XT_ID";

        public const string APPTITLE = "APPTITLE";

        public const string XTMC = "XTMC";

        public const string SERVERPORT = "SERVERPORT";

        public const string SERVERTYPE = "SERVERTYPE";

        public const string SERVERURL = "SERVERURL";

        public const string SERVERWSDLURL = "SERVERWSDLURL";

        #endregion

 

}

本来准备支持多对多,一对多等关系,现在也没有时间,加上发现微软后期的产品加入了对ORM的支持,所以觉得适用范围会越来越窄,就不打算在做了,如果谁对这个东西有兴趣,可以联系我。

转载于:https://www.cnblogs.com/qiuf/archive/2010/12/14/1905990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值