.net core自定义特性操作
最近移植之前写的几个类,发现特性操作发生了一些改变。
直接看代码,建立表和字段特性类,添加一个用户表,设置好特性。
- 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自定义特性操作的更多相关文章
- Asp.net core通过自定义特性实现双端数据验证的一些想法
asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...
- C#反射与特性(七):自定义特性以及应用
目录 1,属性字段的赋值和读值 2,自定义特性和特性查找 2.1 特性规范和自定义特性 2.2 检索特性 3,设计一个数据验证工具 3.1 定义抽象验证特性类 3.2 实现多个自定义验证特性 3.3 ...
- Asp.net core自定义依赖注入容器,替换自带容器
依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...
- C#自定义特性实例
元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性 (1)属性与特性的区别 属性(Property):属性是面向对象思想里所说的封装在类里面的数据字段, ...
- Shader的自定义特性使用
使用自定义特性关键字,可以动态对Shader某一部分代码进行开关操作 shader(定义了KEYWORD1特性): 定义:#pragma shader_feature KEYWORD1 判断:#ifd ...
- c#通过反射获取类上的自定义特性
c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...
- .Net 特性 attribute 学习 ----自定义特性
什么是特性? [Obsolete("不要用无参构造函数",true)] 放在方式上, 该方法就不能使用了 [Serializable]放在类上面.该类就是可以序列化和反序列化使用 ...
- 代码走查25条疑问 C# 跳转新的标签页 C#线程处理 .Net 特性 attribute 学习 ----自定义特性 看懂 ,学会 .NET 事件的正确姿势-简单版
代码走查25条疑问 代码走查(Code Review) 是一个开发人员与架构师集中讨论代码的过程.通过代码走查可以提高代码的 质量,同时减少Bug出现的几率.但是在小公司中并没有代码走查的过程在这 ...
- C# 反射通过GetCustomAttributes方法,获得自定义特性
http://blog.csdn.net/litao2/article/details/17633107 使用反射访问: 自定义属性的信息和对其进行操作的方法. 一.实例1 1.代码: 如:Syste ...
随机推荐
- pip安装flask问题解决
环境:python 2.7 pip install virtualenv pip install flask 提示成功但无效 查看http://docs.jinkan.org/docs/flask/i ...
- leetcode 181 Employees Earning More Than Their Managers 不会分析的数据库复杂度
https://leetcode.com/problems/employees-earning-more-than-their-managers/description/ 老师上课没分析这些的复杂度, ...
- netbeans 窗体字体大小设置
当计算机分辨率变大的时候,打开netbeans的时候,字体就会变得越来越小 看起来很不爽,所要就要改变一下,窗体字体大小. 在网上找到了一段修改netbeans窗体字体大小的配置信息,现标记起来,以便 ...
- mac os 和 ubuntu 上测试工具check-0.9.10的安装
由于工作需要,要使用check 这个单元测试工具. 首先,说一说在Mac10.9上面的安装.我是直接在官网(http://check.sourceforge.net)上下载源码包. 1,解压 2,进入 ...
- 《Flink 源码解析》—— 源码编译运行
更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...
- 工作采坑札记:1. Hadoop中的BytesWritable误区
1. 背景 近日帮外部门的同事处理一个小需求,就是将HDFS中2018年至今所有存储的sequence序列化文件读取出来,重新保存成文本格式,以便于他后续进行处理.由于同事主要做机器学习方向,对had ...
- VCL
vcl常用配置 不缓存摸一个资源 在vcl_recv中 if (req.url ~ "private") { return (pass); } 动静分离 先定一个多个backend ...
- springboot 整合redisson
整合代码已经过测试 1.pom <!-- redisson --> <dependency> <groupId>org.redisson</groupId&g ...
- Hibernate课程 初探多对多映射1-1 多对多应用场景
1 用途: 员工和项目之间的多对多关系 2 实现: 员工表和项目表之外,建立员工和项目关联表来实现: 3 hibernate应用: set元素和many-to-many来实现
- css 引入方式以及css的选择器
一.css的引入方式: 1.行内样式 <div> <p style="color: red">我是一个段落</p> </div> 2 ...