C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证

原创 2015年06月11日 14:58:41

QQ:1187362408 欢迎技术交流和学习

关于系统产品升级报告管理,业务需求:

TODO:

1,升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息)

2,运用的技术:依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量与可null变量巧用,属性实际运用,唯一性验证,url传递中文编码和解码问题

讲解篇:1,服务端aspx,2,服务端后台返回数据(这里采用服务器端程序:aspx.cs)

TODO:

一,讲解篇依据:技术分类进行逐一讲解

二,开源思想:分享和总结技术

一,讲解篇依据:技术分类进行逐一讲解:

1,依赖注入

/*TODO:非功能性辅助需求
         * 业务需求:
         * 升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息)
         * 主表:sys_UpdateReport 子表:sys_UpdateReportCustom
         * 标识:gKey【键值】,sVersionNunber【版本信息关联子表】,sAreaCode【对每一个地区升级】
         */
        Isys_UpdateReportCustomBLL iBLL = IOCFactory.GetIOCResolve<Isys_UpdateReportCustomBLL>();//依赖注入 版本升级报告业务逻辑层接口
        Isys_AreaDAL iAreaDAL = IOCFactory.GetIOCResolve<Isys_AreaDAL>();//依赖注入 地区信息数据层接口

2,变量声明

private string[] sareacodearray = new string[] { };//声明 地区编码【可能是一对数组】
        private string sareacode { get; set; }//声明 地区编码
        private int sareacodearraylength { get; set; }//声明 地区编码长度
        private sys_Area modelArea = new sys_Area();//声明并初始化地区实体,以便获取地区信息

3,三元表达式

<pre name="code" class="csharp">sVNunber = svb == null ? "" : svb.Value;

sareanamearray = sareanamearray != "" ? sareanamearray.Substring(0, sareanamearray.Length - 1) : "";//截取,最后一个字符^






4,常用字符串相关操作方法

/// <summary>
        /// 依据地区编码返回地区名称
        /// </summary>
        /// <param name="sAreaCode">地区编码</param>
        /// <returns>地区名称(可能是多个)</returns>
        public string GetsAreaNameBysAreaCode(object sAreaCode)
        {
            string sareanamearray = "";//声明 地区名称【可能是一对数组】
            if (sAreaCode != null && sAreaCode.ToString() != "")
            {
                sareacode = sAreaCode.ToString();
                /*if (sareacode.IndexOf('^') == -1)
                    sareacode = sareacode + '^';//当用户输入一个地区编码,忘记给它自定义添加'^'符号时,检索后台添加一个,便于存取数据及页面展示*/
                sareacodearray = sareacode.Split('^');//地区编码数组
                sareacodearraylength = sareacodearray.Length;//地区编码数组长度
                for (int i = 0; i < sareacodearray.Length; i++)//sAreaCode格式实际中为:code1^code2,sareanamearray格式实际中为:name1,name2
                {
                    modelArea = iAreaDAL.GetModelByID(sareacodearray[i]);//地区
                    if (modelArea != null && !string.IsNullOrEmpty(modelArea.sName))
                    {
                        sareanamearray += modelArea.sName + ",";//地区名称,以','隔开页面展示
                        continue;
                    }
                }
                sareanamearray = sareanamearray != "" ? sareanamearray.Substring(0, sareanamearray.Length - 1) : "";//截取,最后一个字符^
            }
            return sareanamearray;
        }

5,ADO.NET

/// <summary>
        /// 定制需求【依据主表sys_UpdateReport中标识VersionNunber返回List<sys_UpdateReportCustom>】
        /// </summary>
        /// <param name="where">VersionNunber</param>
        /// <returns>sys_UpdateReportCustom数量</returns>
        public int? GetCustomList(System.Linq.Expressions.Expression<Func<sys_UpdateReportCustom, bool>> where)
        {
            return iDal.GetList(where).ToList().Count;
        }

        /// <summary>
        /// 定制需求【依据主表sys_UpdateReport中标识VersionNunber返回List<sys_UpdateReportCustom>】
        /// </summary>
        /// <param name="where">VersionNunber</param>
        /// <returns>List<sys_UpdateReportCustom></returns>
        public List<sys_UpdateReportCustom> GetList(System.Linq.Expressions.Expression<Func<sys_UpdateReportCustom, bool>> where)
        {
            return iDal.GetList(where);
        }

        public sys_UpdateReportCustom GetModelByID(Guid gkey)
        {
            return iDal.GetModelByCondition(P => P.gKey.Equals(gkey));
        }

6,EF机制

private Isys_UpdateReportCustomDAL iDal;
        private IUnitOfWork<BaseFrameworkEntities> uwork;
        public sys_UpdateReportCustomBLL(IUnitOfWork<BaseFrameworkEntities> uwork, Isys_UpdateReportCustomDAL iDal)
        {
            this.iDal = iDal;
            this.uwork = uwork;
            this.uwork.LogEvent = new LogEventHandler(Sys_LogBLL.WriteLog);
        }

7,T4模板自动生成实体类

/// <summary>
    /// 没有元数据文档可用。
    /// </summary>
    [EdmEntityTypeAttribute(NamespaceName="HIP_BaseFrameworkModel", Name="sys_UpdateReportCustom")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class sys_UpdateReportCustom : EntityObject
    {
        #region 工厂方法
    
        /// <summary>
        /// 创建新的 sys_UpdateReportCustom 对象。
        /// </summary>
        /// <param name="gKey">gKey 属性的初始值。</param>
        /// <param name="sVersionNunber">sVersionNunber 属性的初始值。</param>
        /// <param name="sAreaCode">sAreaCode 属性的初始值。</param>
        /// <param name="dOperateTime">dOperateTime 属性的初始值。</param>
        public static sys_UpdateReportCustom Createsys_UpdateReportCustom(global::System.Guid gKey, global::System.String sVersionNunber, global::System.String sAreaCode, global::System.DateTime dOperateTime)
        {
            sys_UpdateReportCustom sys_UpdateReportCustom = new sys_UpdateReportCustom();
            sys_UpdateReportCustom.gKey = gKey;
            sys_UpdateReportCustom.sVersionNunber = sVersionNunber;
            sys_UpdateReportCustom.sAreaCode = sAreaCode;
            sys_UpdateReportCustom.dOperateTime = dOperateTime;
            return sys_UpdateReportCustom;
        }

        #endregion

        #region 基元属性
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.Guid gKey
        {
            get
            {
                return _gKey;
            }
            set
            {
                if (_gKey != value)
                {
                    OngKeyChanging(value);
                    ReportPropertyChanging("gKey");
                    _gKey = StructuralObject.SetValidValue(value);
                    ReportPropertyChanged("gKey");
                    OngKeyChanged();
                }
            }
        }
        private global::System.Guid _gKey;
        partial void OngKeyChanging(global::System.Guid value);
        partial void OngKeyChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String sVersionNunber
        {
            get
            {
                return _sVersionNunber;
            }
            set
            {
                OnsVersionNunberChanging(value);
                ReportPropertyChanging("sVersionNunber");
                _sVersionNunber = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("sVersionNunber");
                OnsVersionNunberChanged();
            }
        }
        private global::System.String _sVersionNunber;
        partial void OnsVersionNunberChanging(global::System.String value);
        partial void OnsVersionNunberChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String sAreaCode
        {
            get
            {
                return _sAreaCode;
            }
            set
            {
                OnsAreaCodeChanging(value);
                ReportPropertyChanging("sAreaCode");
                _sAreaCode = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("sAreaCode");
                OnsAreaCodeChanged();
            }
        }
        private global::System.String _sAreaCode;
        partial void OnsAreaCodeChanging(global::System.String value);
        partial void OnsAreaCodeChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
        [DataMemberAttribute()]
        public global::System.String sContent
        {
            get
            {
                return _sContent;
            }
            set
            {
                OnsContentChanging(value);
                ReportPropertyChanging("sContent");
                _sContent = StructuralObject.SetValidValue(value, true);
                ReportPropertyChanged("sContent");
                OnsContentChanged();
            }
        }
        private global::System.String _sContent;
        partial void OnsContentChanging(global::System.String value);
        partial void OnsContentChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.DateTime dOperateTime
        {
            get
            {
                return _dOperateTime;
            }
            set
            {
                OndOperateTimeChanging(value);
                ReportPropertyChanging("dOperateTime");
                _dOperateTime = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("dOperateTime");
                OndOperateTimeChanged();
            }
        }
        private global::System.DateTime _dOperateTime;
        partial void OndOperateTimeChanging(global::System.DateTime value);
        partial void OndOperateTimeChanged();

        #endregion

    
    }

8,ref变量与可null变量巧用

int? sVersionNunber = null;//某版本下,定制需求数量
            string sVNunber = "";//版本号
/// <summary>
        /// 引用类型变量sVersionNunber,通过指针传递改变其初始值
        /// </summary>
        /// <param name="sVersionNunber">引用类型变量sVersionNunber</param>
        /// <param name="sVNunber">当前版本号:sversionnunber</param>
        public void GetUCustomLengthBysVNunber(ref int? sVersionNunber, string sVNunber)
        {
            if (!string.IsNullOrEmpty(sVNunber))
            {
                sVersionNunber = iCuBLL.GetCustomList(P => P.sVersionNunber == sVNunber);
            }
        }

9,只读属性(为什么只读,因为效率比可写可读属性高)实际运用

/// <summary>
        /// 版本信息
        /// </summary>
        private string SVNBER
        {
            get
            {
                if (!string.IsNullOrEmpty(Request.QueryString["sversionnunber"]))
                {
                    return HttpUtility.UrlDecode(Request.QueryString["sversionnunber"]);//解码版本信息【URL中已编码】
                }
                else
                {
                    return "";
                }
            }
        }
        /// <summary>
        /// 主键属性
        /// </summary>
        private string PKey
        {
            get
            {
                if (!string.IsNullOrEmpty(Request.QueryString["gKey"]))
                {
                    return Request.QueryString["gKey"].ToString();
                }
                else
                {
                    return "";
                }
            }
        }

10,唯一性验证

方法:
//【新增】:验证版本信息是否重复
        protected bool CheckAddCode(sys_UpdateReport model)
        {
            bool isHave = false;
            List<sys_UpdateReport> CheckList = iBLL.GetList(P => P.sVersionNunber == model.sVersionNunber);
            if (CheckList.Count > 0)
            {
                isHave = true;
            }
            return isHave;
        }

        //【修改】:验证版本信息是否重复
        protected bool CheckUpdateCode(sys_UpdateReport model)
        {
            bool isCheck = false;
            List<sys_UpdateReport> CheckList = iBLL.GetList(P => P.sVersionNunber == model.sVersionNunber);
            if (CheckList.Count > 1)
            {
                isCheck = true;
            }
            else
            {
                foreach (var item in CheckList)
                {
                    if (!item.gKey.Equals(model.gKey))
                    {
                        isCheck = true;
                    }
                }
            }
            return isCheck;
        }
调用:
if (CheckUpdateCode(model))
                {
                    Messages("版本信息重复,请重新输入!");
                    return;//跳出方法
                }
if (CheckAddCode(model))
                {
                    Messages("版本信息重复,请重新输入!");
                    return;
                }

11,url传递中文编码和解码问题

主页面:
sversionnunber = chk.attr("sversionnunber");
            //参数:【sversionnunber】版本号
            winer.OpenWin(sversionnunber + '_定制需求', GetUrl(this) + 'UpdateReportCustomList.aspx?sversionnunber=' + encodeURI(sversionnunber), 800, 600, false, this);
            return false;
子页面:
前段javascript:
var sversionnunber = unescape(getParameter("sversionnunber")); //版本信息
后台aspx.cs:
return HttpUtility.UrlDecode(Request.QueryString["sversionnunber"]);//解码版本信息【URL中已编码】
看完了以上,相信你已经对B/S架构有一个较深的理解了,快向应用程序框架学习吧。
二,开源思想:能够帮助我们快速成长

附图:

【删除】判断是否已【定制需求】

【删除】判断是否已【定制需求】

【新增:版本信息唯一性验证】

地区编码【随便输,只要匹配上就显示】

地区编码【随便输,只要匹配上就显示】



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

asp.net 三元运算符数据绑定

asp.net 三元运算符数据绑定
  • y_h_t
  • y_h_t
  • 2010年12月01日 16:20
  • 3409

asp.net三元运算符嵌套用法

锁定" : Eval("ptadstat").ToString() == "1" ? "正常显示" : "已在首页显示"%>

.net中的三元运算符

 9?getFirst(Eval("agricultureid").ToString()).Substring(0,9):getFirst(Eval("agricultureid").ToString...

办公系统Oracle数据库监控、统计常用SQL语句

在维护生产环境数据库时,如果需要人工修改数据,禁止使用工具锁表式修改数据(例如:Select * from XXX ... for Update),最好使用数据处理脚本,例如在命令行中,一个事务处理完...
  • xiaoyw
  • xiaoyw
  • 2013年11月11日 14:52
  • 795

收集oracle统计信息

优化器统计范围: 表统计; --行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN; 列统计; --列中唯一值的数量(NDV),NULL值的数量,...

使用T4为数据库自动生成实体类(C#)

使用T4为数据库自动生成实体类(C#) T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器。使用T4你可以通过写一些ASP.NET-...

根据库表结构自动生成java实体类(生成规范的变量及get/set方法).

import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit...

[.Net码农]Type.GetProperties 方法-获取实体类 变量

https://msdn.microsoft.com/zh-cn/library/aky14axb http://q.cnblogs.com/q/46513/ User u1 = new Use...

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]

系列目录 Unity 2.x依赖注入(控制反转)IOC,对于没有大项目经验的童鞋来说,这些都是陌生的名词,甚至有些同学还停留在拉控件的阶段。 您可以访问http://unity.codeplex....
  • ymnets
  • ymnets
  • 2016年02月22日 12:56
  • 1167

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板

ASP.NET MVC+EF框架+EasyUI实现权限管系列   (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的...
  • txqqnet
  • txqqnet
  • 2013年10月10日 21:07
  • 1088
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证
举报原因:
原因补充:

(最多只允许输入30个字)