c 创建mysql实体模型_C# 通过自定义特性 实现根据实体类自动创建数据库表

Id字段上的DbKey就是自定义特性

///

/// 用户信息

///

public class User

{

[DbKey]

public string Id { get; set; }

public string Name { get; set; }

}

继承Attribute,实现自定义特性DbKey

namespace CustomerAttribute

{

///

/// 数据库主键

///

public class DbKey : Attribute

{

public string Description { get; set; }

public DbKey()

{

}

public DbKey(string description)

{

this.Description = description;

}

}

}

namespace CustomerAttribute

{

///

/// 用户信息

///

public class User

{

[DbKey]

public string Id { get; set; }

public string Name { get; set; }

}

///

/// 用户角色

///

public class UserRole

{

[DbKey(“用户ID”)]

public string UserId { get; set; }

[DbKey(“角色ID”)]

public string RoleId { get; set; }

}

}

namespace CustomerAttribute

{

class Program

{

///

/// 获取数据库主键字段

///

///

///

private static IEnumerable getDbKeyFields()

{

// 获取当前类中的公共字段

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();

Console.WriteLine(“User表的主键为:” + string.Join(“,”, userKeyFields.Select(field => field.Name)));

var userRoleKeyFields = getDbKeyFields();

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();

}

}

}

}

一些Orm的实现,就是通过解析特性信息,动态生成数据库表

EntityFrameworkCore 根据实体类自动创建数据库

1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1   Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) …

学习MVC之租房 站(三)-编写实体类并创建数据库

在上一篇中,搭建好了项目框架,并配置了EF.Log4Net和进程外Session.接下来会编写Eneity类并采用CodeFirst的方式 …

Hibrenate实现根据实体类自动创建表或添加字段

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 实现: 在配置hibernate的配置文件中将hbm2ddl.auto设置为update,如:Xml代码&l …

阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系

创建新项目,一对多 复制刚才关闭的项目的文件 复制到们的新项目里面 复制包的依赖 删减相关代码.只保留这三个查询的方法 模糊查询改成传统的占位符的方式 之前是可以自定义实体类的属性字段,和数据库的字典 …

Do You Kown Asp.Net Core – 根据实体类自动创建Razor Page CURD页面模板

Scaffolding Template Intro 我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然 …

IntelliJ IDEA 2017版 spring-boot 实现jpa基本部署,通过实体类自动建立数据库

一.添加Spring Boot JPA-Hibernate步骤 1.在pom.xml添加mysql,spring-data-jpa依赖      2.在application.properties文件 …

java工具类–自动将数据库表生成javabean

最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 …

Hibernate由model类自动同步数据库表结构

在开发中遇到了个问题,每次测试数据库增加表结构的时候,本地pull下最新代码导致启动 错,上 搜了快速解决办法—->hibernate 配置属性中,hibernate.hbm2ddl.aut …

Hibernate根据实体类自动创建表

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢单,只要在hibernate.cfg.xml里加上如下代码 Xml代码

随机推荐

mysql数据库使用

C#操作Mysql数据库的存储过程, 址 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间 …

python:爬虫

模块: (1)url管理器:对url进行管理 (2) 页下载器(urllib2):将需要爬取的url指定的 页以字符串的形式下载下来 (3) 页解释器(BeautifulSoup):解析 利用urll …

PHP实现RESTful风格的API实例(三)

接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R …

微软成立反 络犯罪中心,工作环境如美剧CSI情景

微软在总部大楼内设立新 络犯罪中心(Cybercrime Center),旨在针对全球恶意软件.僵尸 络以及其他互联 犯罪行为进行实时追踪并予以打击.微软将“ 络犯罪中心”设置在雷德蒙德总部大楼,目的 …

asp.net Handler中的IsReusable属性及在Handler中使用Session

大家在用HttpHandler的时候,一般都会有两个大的疑问(当然,前提是你有钻研精神的话,呵呵) 1. IsReusable到底什么意思实说,这个属性很多人都感兴趣,但搞懂的人确实不多.MSD …

本地yum源安装GCC

Linux环境下yum源安装GCC 前提条件是有Linux环境的安装盘ISO文件 在Linux系统中创建两个目录,一个是用来存放ISO文件,一个是用来挂载该ISO文件,如下: $mkdir /root …

JdbcTemplate学习笔记

JdbcTemplate学习笔记 1.使用JdbcTemplate的execute()方法执行SQL语句 Java 代码 jdbcTemplate.execute(“CREATE TABLE …

Hi3515支持NFS-ROOT启动

目前在做Hi3515平台监控项目,前期开发一直使用SDK里推荐的mount nfs方式来调试代码,虽然也算方便,但是我一直觉得用法NFS-ROOT才是最省事的方法,而且最接近最终用户使用环境,因为如果 …

linux设备驱动之字符设备驱动模型(2)

在上一篇中我们已经了解了字符设备驱动的原理,也了解了应用层调用内核函数的机制,但是我们每次操作设备,都必须首先通过mknod命令创建一个设备文件名,比如说我们要打开u盘,硬盘等这些设备,难道我们还要自 …

持续交付之软件包管理maven篇

背景 持续交付的我们常见的流程如下,其中有一个环节就是软件包管理 今天我们以maven仓库为示例,如下是Jenkins与CD生态: 持续交付的示例 5 Principles 五个原则 Deliver …

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树使用数据库创建和删除表32044 人正在系统学习中 相关资源:MinionProfitsTracker:随着市场价格波动,轻松识别最赚钱的奴才[在…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月4日
下一篇 2021年1月4日

相关推荐