全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#实现根据实体类自动创建数据库表

.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小时内与您取得联系。