最近移植之前写的几个类,发现特性操作发生了一些改变。

直接看代码,建立表和字段特性类,添加一个用户表,设置好特性。

 using System;

 namespace TestDemo
{
/// <summary>
/// 表实体特性
/// </summary>
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class TableAttribute : Attribute
{
/// <summary>
/// 数据库表名称
/// </summary>
public string TableName { get; set; }
/// <summary>
/// 数据库表注释
/// </summary>
public string Description { get; set; } public TableAttribute()
{
TableName = string.Empty;
Description = string.Empty;
}
}
}

表特性

 using System;

 namespace TestDemo
{
/// <summary>
/// 列特性
/// </summary>
[AttributeUsage( AttributeTargets.Property , AllowMultiple = false)]
public class TableColumnAttribute : Attribute
{
/// <summary>
/// 列名称
/// </summary>
public string ColumnName { get; set; }
/// <summary>
/// 字段说明
/// </summary>
public string Description { get; set; }
/// <summary>
/// 是否是主键
/// </summary>
public bool IsPrimaryKey { get; set; }
/// <summary>
/// 主键是否自动增长
/// </summary>
public bool IsPrimaryKeyAuto { get; set; }
/// <summary>
/// 数据库数据类型
/// </summary>
public string DbDataType { get; set; }
/// <summary>
/// 字符串最大长度
/// </summary>
public int MaxLength { get; set; }
/// <summary>
/// 是否不可为空
/// </summary>
public bool NotNull { get; set; } public TableColumnAttribute()
{
ColumnName = string.Empty;
Description = string.Empty;
IsPrimaryKey = false;
IsPrimaryKeyAuto = false;
DbDataType = "varchar";
MaxLength = ;
NotNull = false;
}
}
}

表字段特性

 namespace TestDemo
{
[Table(Description = "用户表", TableName = "USER")]
public class User
{
[TableColumn(ColumnName = "ID", DbDataType = "int", Description = "主键", IsPrimaryKey = true, IsPrimaryKeyAuto = true, MaxLength = , NotNull = true)]
public int Id { get; set; } [TableColumn(ColumnName = "LOGINNO", DbDataType = "varchar", Description = "登录名", IsPrimaryKey = false, IsPrimaryKeyAuto = false, MaxLength = , NotNull = true)]
public string LoginNo { get; set; } [TableColumn(ColumnName = "USERNAME", DbDataType = "varchar", Description = "用户姓名", IsPrimaryKey = false, IsPrimaryKeyAuto = false, MaxLength = , NotNull = false)]
public string UserName { get; set; } [TableColumn(ColumnName = "NICKNAME", DbDataType = "varchar", Description = "昵称", IsPrimaryKey = false, IsPrimaryKeyAuto = false, MaxLength = , NotNull = false)]
public string NickName { get; set; } [TableColumn(ColumnName = "TEL", DbDataType = "varchar", Description = "电话", IsPrimaryKey = false, IsPrimaryKeyAuto = false, MaxLength = , NotNull = false)]
public string Tel { get; set; }
}
}

用户表

获取用户表以及表字段的特性。

 using System;
using System.Reflection;
using System.Text; namespace TestDemo
{
public class Program
{
public static void Main(string[] args)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); TableAttribute table = GetTableAttribute<User>();
Console.WriteLine("User(TableName:" + table.TableName + "\r\n,Description:" + table.Description + ")");
Console.WriteLine(); TableColumnAttribute colId = GetTableColumnAttribute<User>("Id");
Console.WriteLine("Id(ColumnName:" + colId.ColumnName
+ "\r\n,DbDataType:" + colId.DbDataType
+ "\r\n,Description:" + colId.Description
+ "\r\n,IsPrimaryKey:" + colId.IsPrimaryKey
+ "\r\n,IsPrimaryKeyAuto:" + colId.IsPrimaryKeyAuto
+ "\r\n,MaxLength:" + colId.MaxLength
+ "\r\n,NotNull:" + colId.NotNull + ")");
Console.WriteLine(); TableColumnAttribute colName = GetTableColumnAttribute<User>("UserName");
Console.WriteLine("UserName(ColumnName:" + colName.ColumnName
+ "\r\n,DbDataType:" + colName.DbDataType
+ "\r\n,Description:" + colName.Description
+ "\r\n,IsPrimaryKey:" + colName.IsPrimaryKey
+ "\r\n,IsPrimaryKeyAuto:" + colName.IsPrimaryKeyAuto
+ "\r\n,MaxLength:" + colName.MaxLength
+ "\r\n,NotNull:" + colName.NotNull + ")"); Console.ReadLine();
} /// <summary>
/// 获取表特性
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static TableAttribute GetTableAttribute<T>()
{
Type t = typeof(T);
TableAttribute m = t.GetTypeInfo().GetCustomAttribute<TableAttribute>();
return m;
} /// <summary>
/// 获取列特性
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="propertyName"></param>
/// <returns></returns>
public static TableColumnAttribute GetTableColumnAttribute<T>(string propertyName)
{
TableColumnAttribute m = null; Type t = typeof(T);
PropertyInfo[] arryProperty = t.GetProperties();
if (arryProperty != null)
{
foreach (PropertyInfo p in arryProperty)
{
if (p.Name == propertyName)
{
m = p.GetCustomAttribute<TableColumnAttribute>();
}
}
} return m;
}
}
}

Program

运行起来看看获取的情况!

.net core自定义特性操作的更多相关文章

  1. Asp.net core通过自定义特性实现双端数据验证的一些想法

    asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...

  2. C#反射与特性(七):自定义特性以及应用

    目录 1,属性字段的赋值和读值 2,自定义特性和特性查找 2.1 特性规范和自定义特性 2.2 检索特性 3,设计一个数据验证工具 3.1 定义抽象验证特性类 3.2 实现多个自定义验证特性 3.3 ...

  3. Asp.net core自定义依赖注入容器,替换自带容器

    依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...

  4. C#自定义特性实例

    元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性   (1)属性与特性的区别  属性(Property):属性是面向对象思想里所说的封装在类里面的数据字段, ...

  5. Shader的自定义特性使用

    使用自定义特性关键字,可以动态对Shader某一部分代码进行开关操作 shader(定义了KEYWORD1特性): 定义:#pragma shader_feature KEYWORD1 判断:#ifd ...

  6. c#通过反射获取类上的自定义特性

    c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...

  7. .Net 特性 attribute 学习 ----自定义特性

    什么是特性? [Obsolete("不要用无参构造函数",true)] 放在方式上, 该方法就不能使用了  [Serializable]放在类上面.该类就是可以序列化和反序列化使用 ...

  8. 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版

    代码走查25条疑问   代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...

  9. C# 反射通过GetCustomAttributes方法,获得自定义特性

    http://blog.csdn.net/litao2/article/details/17633107 使用反射访问: 自定义属性的信息和对其进行操作的方法. 一.实例1 1.代码: 如:Syste ...

随机推荐

  1. Python 元组 (tuple)

    作者博文地址:https://www.cnblogs.com/liu-shuai/ Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号 ...

  2. IPM的修炼之路

    总结了一下最近一年半来看到的产品经理方面的素养资料. 产品经理: 必备素质:市场洞察,抽象概括,创新想象,心思细腻,热爱产品,具备一定的企业家精神等. 是通才:市场,项目,设计,管理,用户,统计,心理 ...

  3. 在PHP中使用全局变量的几种方法

    简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...

  4. Jersey前后端交互初体验

    一 get请求 前端 基本的GET请求 $.ajax({ type : "get", url : "../rest/api/account/delete", d ...

  5. js对象动态赋值

    <view class="movies-template"> <template is="movieListTemplate" data=&q ...

  6. Java入门之Tomcat运行

    在上一篇<Java入门之Tomcat安装及环境变量配置>中提到,启动Tomcat要保持CMD下执行startup.bat的界面不关闭,才能访问Tomcat. 这是因为只有保持startup ...

  7. MSSql关闭自增列

    在对已经建好表结构的表抽取数据的时候,突然报错,根据Error发现,不能显式插入有自增列的值. 于是搜索后,用 set IDENTITY_INSERT #Tmp onset IDENTITY_INSE ...

  8. JAVA ------ 大牛

    李学凯 :http://blog.csdn.net/qq_27093465/article/details/51750535 码农场:http://www.hankcs.com/program/ 徐刘 ...

  9. P1576 最小花费

    题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...

  10. The eleventh day

    What's the damage? Thanks so much for fixing the break on my car . What's the damage for the work yo ...