.Net新手通常容易把属性(Property)跟特性(Attribute)搞混,其实这是两种不同的东西

属性指的类中封装的数据字段;而特性是对类、字段、方法和属性等元素标注的声明性信息
如下代码(Id、Name为User的属性,[DbKey]为Id的特性)
/// <summary>
/// 用户信息
/// </summary>
public class User
{
[DbKey]
public string Id { get; set; }
public string Name { get; set; }
}
特性分预定义特性和自定义特性,本节主要讲述自定义特性
特性能解决什么问题?
假如现在需要通过定义一些实体类,动态创建出对应的数据库表,该怎么做呢?
直接上代码
namespace CustomerAttribute
{
/// <summary>
/// 数据库主键
/// </summary>
public class DbKey : Attribute
{
public string Description { get; set; }
public DbKey()
{
}
public DbKey(string description)
{
this.Description = description;
}
}
}
namespace CustomerAttribute
{
/// <summary>
/// 用户信息
/// </summary>
public class User
{
[DbKey]
public string Id { get; set; }
public string Name { get; set; }
}
/// <summary>
/// 用户角色
/// </summary>
public class UserRole
{
[DbKey("用户ID")]
public string UserId { get; set; }
[DbKey("角色ID")]
public string RoleId { get; set; }
}
}
namespace CustomerAttribute
{
class Program
{
/// <summary>
/// 获取数据库主键字段
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
private static IEnumerable<PropertyInfo> getDbKeyFields<T>()
{
// 获取当前类中的公共字段
var fields = typeof(T).GetProperties();
// 查找有DbKey特性的字段
var keyFields = fields.Where(field => (DbKey)Attribute.GetCustomAttribute(field, typeof(DbKey)) != null);
return keyFields;
}
private static string getDescription(PropertyInfo field)
{
string result = string.Empty;
var dbKey = (DbKey)Attribute.GetCustomAttribute(field, typeof(DbKey));
if (dbKey != null) result = dbKey.Description;
return result;
}
static void Main(string[] args)
{
try
{
var userKeyFields = getDbKeyFields<User>();
Console.WriteLine("User表的主键为:" + string.Join(",", userKeyFields.Select(field => field.Name)));
var userRoleKeyFields = getDbKeyFields<UserRole>();
Console.WriteLine("UserRole表的主键为:" + string.Join(",", userRoleKeyFields.Select(field => field.Name)));
foreach (PropertyInfo field in userRoleKeyFields)
{
string description = getDescription(field);
Console.WriteLine(string.Format("{0}字段的描述信息为:{1}", field.Name, description));
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.ReadLine();
}
}
}
}
从上边代码可以看出来,特性本身也是类,继承自Attribute类,我们可以对类、方法、属性等元素进行特性标注
上边是一个简单示例,我们可以通过自定义[DbKey]特性,标注在需要设置主键的字段上
需要动态创建数据库的时候,可以从实体类中解析出表名、字段名、主键字段、字段说明等等,然后生成创建数据库表的脚本,动态创建数据库表
创建数据库的代码,后边可以进一步补充
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# C#
# 实体类创建数据库表
# 实体类和数据库表
# C# http系列之以form-data方式上传多个文件及键值对集合到远程服务器
# C# 使用multipart form-data方式post数据到服务器
# C#后端接收form-data
# 创建实体类教程
# 主键
# 自定义
# 类中
# 我们可以
# 是一个
# 这是
# 两种
# 怎么做
# 可以看出
# 什么问题
# 本节
# 字段名
# 实体类
# ID
# CustomerAttribute
# namespace
# UserId
# RoleId
# Program
# typeparam
相关文章:
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何在景安云服务器上绑定域名并配置虚拟主机?
建站之星2.7模板:企业网站建设与h5定制设计专题
建站之星下载版如何获取与安装?
如何彻底删除建站之星生成的Banner?
如何通过二级域名建站提升品牌影响力?
如何基于PHP生成高效IDC网络公司建站源码?
如何快速搭建FTP站点实现文件共享?
制作网站外包平台,自动化接单网站有哪些?
长沙做网站要多少钱,长沙国安网络怎么样?
jQuery 常见小例汇总
如何选择建站程序?包含哪些必备功能与类型?
平台云上自助建站如何快速打造专业网站?
如何零基础开发自助建站系统?完整教程解析
简单实现Android文件上传
教学网站制作软件,学习*后期制作的网站有哪些?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
C#怎么创建控制台应用 C# Console App项目创建方法
如何配置IIS站点权限与局域网访问?
如何获取PHP WAP自助建站系统源码?
如何快速完成中国万网建站详细流程?
深圳网站制作平台,深圳市做网站好的公司有哪些?
太平洋网站制作公司,网络用语太平洋是什么意思?
如何获取上海专业网站定制建站电话?
高端网站建设与定制开发一站式解决方案 中企动力
电商网站制作价格怎么算,网上拍卖流程以及规则?
安徽网站建设与外贸建站服务专业定制方案
大连 网站制作,大连天途有线官网?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
一键网站制作软件,义乌购一件代发流程?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
大型企业网站制作流程,做网站需要注册公司吗?
黑客入侵网站服务器的常见手法有哪些?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何选择适合PHP云建站的开源框架?
如何在阿里云虚拟主机上快速搭建个人网站?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
长沙企业网站制作哪家好,长沙水业集团官方网站?
网站制作免费,什么网站能看正片电影?
如何在IIS服务器上快速部署高效网站?
建站之星后台密码遗忘或太弱?如何重置与强化?
青岛网站建设如何选择本地服务器?
Python如何创建带属性的XML节点
北京的网站制作公司有哪些,哪个视频网站最好?
*请认真填写需求信息,我们会在24小时内与您取得联系。