CSMS2数据验证

数据验证准备使用微软企业库进行验证,说白了就是在dto上面加特性。

下面看下最终的dto:

//********************************************************
//创建日期:<创建日期,2012-05-25>
//创建作者:<张易,zhangyi@shanghai3h.com>
//功能说明:  复核登记查询DTO
//********************************************************
using System.Runtime.Serialization;
using CSMS2.Application.SelfValidation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using System;
using CSMS2.Resources;
using CSMS2.Entity;

namespace CSMS2.Application.DTO.BiaoWuGL
{
    [EnitityMapping(TableName="bw_fuhedj_view")]
    public class FuHeDJSearchDTO
    {
        /// <summary>
        
/// 站点号
        
/// </summary>
        [STValidator(MessageTemplateResourceName = "090101", MessageTemplateResourceType = typeof(Message))]
        public string S_ST { getset; }

        /// <summary>
        
/// 册本号
        
/// </summary>
        [CHValidator(MessageTemplateResourceName = "090102", MessageTemplateResourceType = typeof(Message))]
        public string S_CH { getset; }

        /// <summary>
        
/// 用户编号
        
/// </summary>
        [CIDValidator(MessageTemplateResourceName = "090103", MessageTemplateResourceType = typeof(Message))]
        public string S_CID { getset; }

        /// <summary>
        
/// 客户编号
        
/// </summary>
        [EnitityMapping(ColumnName="s_kehuid")]
        [KHBHValidator(MessageTemplateResourceName = "090104", MessageTemplateResourceType = typeof(Message))]
        public string S_KeHuBH { getset; }

        /// <summary>
        
/// 户名
        
/// </summary>
        [EnitityMapping(ColumnName = "s_hm", Operater = Operater.Like)]
        [HMValidator(MessageTemplateResourceName = "090105", MessageTemplateResourceType = typeof(Message))]
        public string S_HM { getset; }

        /// <summary>
        
/// 地址
        
/// </summary>
        [EnitityMapping(ColumnName = "s_dz",Operater= Operater.Like )]
        [DZValidator(MessageTemplateResourceName = "090106", MessageTemplateResourceType = typeof(Message))]
        public string S_DZ { getset; }

    }
}

调用方法

            CSMS2.Application.DTO.BiaoWuGL.FuHeDJSearchDTO searchDTO=new Application.DTO.BiaoWuGL.FuHeDJSearchDTO();
            searchDTO.S_ST = ComTreeZhanDian.SelectValue;
            searchDTO.S_CH = LueCH.EditValue.ToString();
            searchDTO.S_CID = TxtZhangHao.Text.ToString();
            searchDTO.S_KeHuBH = TxtKeHuBH.Text.ToString();
            searchDTO.S_HM = TxtS_HM.Text.ToString();
            searchDTO.S_DZ = TxtS_DZ.Text.ToString();
            string message;
            if (!DataAnnotationsEntityValidator.IsValid<CSMS2.Application.DTO.BiaoWuGL.FuHeDJSearchDTO>(searchDTO, out message))
            {
                AlterHelper.MessageBoxShowInfo(message);
                return;
            }

通过代码可以看到我们只需要负责dto的赋值,然后调用DataAnnotationsEntityValidator的IsValid方法就可,将最终的错误结果输出就可以了。

 

在DTO中这里主要使用了自定义验证,验证提示放在资源文件中。如有公共的验证信息都可以放在CSMS2.Application.SelfValidation下,现在已经有了用户编号、站点、户名、地址、客户编号的检验。如果有多个属性需要一起验证需要使用HasSelfValidation。代码如下:

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;

using Microsoft.Practices.EnterpriseLibrary.Validation;

using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

 

[HasSelfValidation]

public class TemperatureRange

{

  private int min;

  private int max;

 

  // ...

 

  [SelfValidation]

  public void CheckTemperature(ValidationResults results)

  {

    if (max < min)

      results.AddResult(new ValidationResult("Max less than min"this""""null));

  }

}

自定义验证的写法大致如下:

 

//********************************************************************************//
//创建日期:<创建日期,2012-02-14>
//创建作者:<张易,zhangyi@shanghai3h.com>
//功能说明:对户名进行校验
//********************************************************************************//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using CSMS2.Infrastructure.Helpers;

namespace CSMS2.Application.SelfValidation
{
    public class HMValidator : Validator<string>
    {
        public HMValidator(string messageTemplate, string tag)
            : base(messageTemplate, tag)
        {

        }

        protected override string DefaultMessageTemplate
        {
            get { throw new NotImplementedException(); }
        }

        protected override void DoValidate(string objectToValidate, object currentTarget,
            string key, ValidationResults validationResults)
        {
            bool result = false;

            string hm = objectToValidate.ToString();
            int length = System.Text.Encoding.Default.GetByteCount(hm);
            if (length >= 0 && length <= 200)
                result = true
            if (!result)
            {
                LogValidationResult(validationResults, this.MessageTemplate, currentTarget, key);
            }
        }
    }

    public class HMValidatorAttribute : ValidatorAttribute
    {
        protected override Validator DoCreateValidator(Type targetType)
        {
            return new HMValidator(string.Empty, string.Empty);
        }
    }
   
}

其他的验证规则可以直接参看如下文章:

http://www.cnblogs.com/kyo-yo/archive/2010/07/19/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part1.html

http://www.cnblogs.com/kyo-yo/archive/2010/07/21/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part2.html

http://www.cnblogs.com/kyo-yo/archive/2010/08/02/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part3.html

http://msdn.microsoft.com/en-us/library/ff664694%28v=PandP.50%29.aspx

 

posted on 2012-05-31 19:01  zyi  阅读(641)  评论(2编辑  收藏  举报

导航