.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 ...
随机推荐
- My first Python program(附增加清屏方法)
#TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in ['F', 'f']: C = (eval(Te ...
- Flume启动错误之:Bootstrap Servers must be specified
今天测试项目的时候需要启动Flume,然而在启动时遇到了Bootstrap Servers must be specified错误,错误日志如下: [kfk@bigdata-pro01 flume-- ...
- 分布式数据库sort那些事儿
待填. 收回之前的填坑时间. 计划永远没有变化快,所有周末都奉献上还是有干不完的活,待闲时再来填..
- PHP的htmlspecialchars、strip_tags、addslashes解释
第一个函数:strip_tags,去掉 HTML 及 PHP 的标记 注意:本函数可去掉字串中包含的任何 HTML 及 PHP 的标记字串.若是字串的 HTML 及 PHP 标签原来就有错,例如少了大 ...
- HDU 4738——Caocao's Bridges——————【求割边/桥的最小权值】
Caocao's Bridges Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU5411——CRB and Puzzle——————【矩阵快速幂优化dp】
CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- Hosted Services+Quartz实现定时任务调度
背景 之前.net core使用quartz.net时,总感觉非常变扭,百度和谷歌了N久都没解决以下问题,造成代码丑陋,非常不优雅: 1.项目启动时,要立刻恢复执行quartz.net中的任务 2.q ...
- ora-12541:tns: 无监听程序解决办法
1.首先找到 Oracle 安装文件 中 listener.ora文件与tnsnames.ora文件: 列如:路径:E:\app\当前系统的账户名\product\11.2.0\dbhome_1\NE ...
- 初识ImageSwither
imageswitcher继承自viewswitcher,使用ImageSwither只需要两步: 1.为ImageSwither提供一个ViewFactory,该ViewFactory生成的View ...
- Web前端开发规范(一)
1.前言 网页开发技术从1989年开始至今已经走过了20余年,从最初纯粹的学术交流,到门户网站.电子商务网站.博客.E-mail.Web游戏.SNS网站等,以及到如今的移动Web网站(其实可以认为是P ...