用自定义属性实现必需字段的检查

原创 2007年10月09日 09:52:00
在持久化类时,一个对象需要保存到数据库中表,数据库中的表在设计时会根据一些设计范式的要求定义一些必要的字段
这样,在持久化时,就必须检查一下这些与数据库映射字段是否已经赋值了,如果没有,则不能保存到数据库中,这时应弹出
对话框来提示,以防止错误异常的发生.
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Diagnostics;
using System.Windows.Forms;

namespace desz
{
    
/// <summary>
    
/// 这是我的第一个属性,测试文档,这个属性只能用于Field
    
/// </summary>
    [AttributeUsage(AttributeTargets.Field, Inherited = true)]
    
public class cxyAttrib : System.Attribute
    {
        
string name;
        
string createdate;
        
bool IsRequired;

        
public cxyAttrib()
        {
        }
        
public cxyAttrib(string t_date,string t_name,bool t_req)
        {
            createdate 
= t_date;
            name 
= t_name;
            IsRequired 
= t_req;
        }



        
/// <summary>
        
/// 当前属性的名称
        
/// </summary>
        public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
        
/// <summary>
        
/// 创建日期
        
/// </summary>
        public string CreateDate
        {
            
get { return createdate; }
            
set { createdate = value; }
        }
        
/// <summary>
        
/// 是否必须
        
/// </summary>
        public bool Required
        {
            
get { return IsRequired; }
            
set { IsRequired = value; }
        }

    }

    
public class MyPeriseObject
    {
    
//在这里设置那一些字段是必须的,作为以后检查的根据
        [cxyAttrib(CreateDate = "2007-10-9", Name = "object id", Required = true)]
        
private string id;
        [cxyAttrib(CreateDate 
= "2007-10-8", Name = "object name", Required = true)]
        
private string name;
        [cxyAttrib(CreateDate 
= "2007-10-7", Name = "object color", Required = false)]
        
private string color;

    
//以下的就是属性了
      
        
public string ID
        {
            
get { return id; }
            
set { id = value; }
        }

       
        
public string Name
        {
            
get { return name; }
            
set { name = value; }
        }

      
        
public string Color
        {
            
get { return color; }
            
set { color = value; }
        } 

    }

    
/// <summary>
    
/// 用来检查当前物体在持久化之前所有的属性是否都已经全部赋值了
    
/// </summary>
    public class CheckAttribute
    {
        
public static void Run()
        {
            MyPeriseObject componet1 
= new MyPeriseObject();
            componet1.ID 
= "100";
            Type currentType 
= componet1.GetType();
            FieldInfo[] fi 
= currentType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);//找出当前对type中有那些fields



            
foreach (FieldInfo tf in fi)
            {
        
//找出赋在这些field上的自定义属性
                cxyAttrib tpcxy = (cxyAttrib)Attribute.GetCustomAttribute(tf, typeof(cxyAttrib));
                
if (tpcxy != null)
                    
if (tpcxy.Required) //检查设置时值是否是必须,并检查当前值是否是必须
                        if (tf.GetValue(componet1) == null)
                        {
                            Debug.WriteLine(
"必要属性没有被设置值");
                            MessageBox.Show(tf.Name 
+ "是一个必要属性 但是没有被设置值");
                        }
                        
else
                        {
                            MessageBox.Show(tf.Name 
+ "的属性值是:" + tf.GetValue(componet1).ToString());
                        } 
            }

        }
    }
}
 

MyBatis学习-----解决在"数据表中字段与自己定义的属性类的属性字段不相同“的情况下的问题

本文转载自:孤傲苍狼老师的博客(http://www.cnblogs.com/xdp-gacl/p/4264425.html) 在面对数据库所定义的字段与自己在web工程中定义的属性类的字段不相同的时...
  • sinat_16108045
  • sinat_16108045
  • 2016年02月27日 10:17
  • 1561

java 自定义注解验证 (仅限于实体属性值上的注解)

java 自定义注解验证 原理基于java的反射和映射 可自己添加所需要的注解,本案例中只写了三个自定义注解类 本案例只花了半天时间,如有不好之处请多提提意见。谢谢!...
  • weilai_zhilu
  • weilai_zhilu
  • 2017年02月23日 10:41
  • 4232

使用自定义注解来验证属性是否规范

上一篇文章我们写了一个通过注解返回查询sql语句的例子,这次我们来使用注解去验证某个对象属性是否按照我们的注解来赋值的。 例子:我们需要定义一个MyLimit的注解,这个注解里面规定了类属性的限制;...
  • u014104286
  • u014104286
  • 2016年08月23日 14:33
  • 1583

Log4net自定义信息(变量或属性或字段)存入数据库

  • 2014年09月07日 22:22
  • 142KB
  • 下载

sharepoint 2010 扩展webpart自定义属性边栏字段

  • 2012年12月17日 15:53
  • 58KB
  • 下载

关于自定义代码生成器(续)---SQL2008查询数据库字段主键,外键,唯一键等相关属性

2. 查询字段名,表名,架构名,序号,是否主键,是否外键,是否唯一键,是否为空,是否自动增长,默认值,字段类型,大小,长度,小数位数,相关属性select a.*,isnull(b.rtable,'0...
  • nlx0201
  • nlx0201
  • 2013年01月24日 14:05
  • 1552

sharepoint 2010 如何扩展webpart自定义属性边栏字段 custom webpart properties

webpart 是在sharepoint开发过程中,最常用的一种方式。扩展webpart自定义属性边栏字段,可以做到动态给webpart配置参数。如下图所示,在杂项里面,我们看到有三个属性,compa...
  • xiaozhudan1110
  • xiaozhudan1110
  • 2013年06月03日 16:01
  • 541

Java(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法

1. 要求 对列表(List)中的自定义对象,要求能够按照对象的属性(字段)进行排序(正序、倒序)。 如:用户对象(Member)有用户名(username)、级别(level)、出生日期...
  • superdog007
  • superdog007
  • 2017年01月06日 09:27
  • 2032

Log4net自定义信息(变量或属性或字段)存入数据库

 本文所提及的方式,不是原创,方法都来自互联网,出处不详。自己正好了一些...
  • dacong
  • dacong
  • 2014年09月07日 22:29
  • 4437

Android自定义属性实现带边框效果的TextView

  • 2014年06月13日 19:53
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用自定义属性实现必需字段的检查
举报原因:
原因补充:

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