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架构有一个较深的理解了,快向应用程序框架学习吧。
二,开源思想:能够帮助我们快速成长

附图:

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

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

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

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

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



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

使用T4模板为EF框架添加数据库实体注释

源地址:http://jeffblog.sinaapp.com/archives/501
  • ful1021
  • ful1021
  • 2014年08月19日 10:55
  • 2138

T4模板, Entity Framework数据库映射文件模板 的自定义生成

在使用Entity Framework(以后简称EF)的时候,会使用到其中的 Ado.net数据实体模型 类型的文件,如图: 默认该文件会自动生成数据实体类,但是有时候我们又想自己修改一下生...
  • expt
  • expt
  • 2012年07月03日 15:51
  • 9484

T4模版引擎之生成数据库实体类

T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇。T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是...
  • as2712101
  • as2712101
  • 2013年11月09日 16:28
  • 2078

EF 自动生成实体类中加验证的属性重新生成后属性被覆盖解决办法

1.手动创建一个部分类 (你可以手动创建 partial class, 内容为空) [MetadataType(typeof(AppleMetadata))] public partial c...
  • qbook
  • qbook
  • 2015年04月21日 18:38
  • 1334

T4模板

1 如何使用T4模板,比如我们在Model中添加了EF,这时候就会有T4模板。这个T4模板的名字就是....tt ,它的作用就是成类文件。假设我们现在需要在接口中类库中批量生成很多按照自己定义的接口类...
  • Fanbin168
  • Fanbin168
  • 2016年04月30日 15:45
  • 2077

T4 生成实体和简单的CRUD操作

主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个...
  • JGL5987
  • JGL5987
  • 2014年05月09日 11:39
  • 8521

使用T4模板生成 数据库实体类

using System; namespace Tarkool.IncentiveSolution.BLLModel {            string connectionString...
  • lpsswan
  • lpsswan
  • 2014年09月12日 18:13
  • 1535

c# 三元表达式 无法确定条件表达式的类型

b ? x : y  如果 X 和 Y 的类型相同,则此类型为该条件表达式的类型。 否则,如果存在从 X 到 Y 的隐式转换(第 6.1 节),但不存在从 Y 到 X 的隐式转换,则 Y 为条件表...
  • XuWei_XuWei
  • XuWei_XuWei
  • 2014年03月13日 17:06
  • 1895

如何避免在EF自动生成的model中的DataAnnotation被覆盖掉

相信很多人刚接触EF+MVC的时候,会有这个疑问,就是当我们在model类中加验证信息的时候,会在重新生成model的时候被重写掉。这里介绍一个方法: 比如我有个Employee类是从数据库中生成到m...
  • mx5721
  • mx5721
  • 2014年05月13日 12:46
  • 2285

EF学习笔记——生成自定义实体类

使用EF,实体类都是自动生成。如果要
  • leftfist
  • leftfist
  • 2014年05月03日 00:27
  • 13282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证
举报原因:
原因补充:

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