用EFCore的 FluentAPI 方式生成MySql 带注释的数据库表结构
采用的是net Core 3.1框架下的 的WebAPI项目。
1. 创建ASP.NET Core Web项目


2. 添加NuGet引用包,包如下
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tool
Pomelo.EntityFrameworkCore.MySql

3. 创建继承自DbContext 的DataContext文件
public class DataContext : DbContext
{ public DbSet<OperateLog> OperateLog { get; set; } public DataContext(DbContextOptions<DataContext> options) : base(options)
{ } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//optionsBuilder.UseMySql("Server=localhost;database=omc;uid=root;port=3306;pwd=123321");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// base.OnModelCreating(modelBuilder); //Model Mapping用这个
// modelBuilder.ApplyConfigurationsFromAssembly(typeof(DataContext).Assembly); //FluentAPI Mapping用这个
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); }
}
4. 创建实体模型 OperateLog , 及实体映射数据库表的 OperateLogConfig
public class BaseEntity
{
/// <summary>
/// 主键Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDateTime{get;set;}
/// <summary>
/// 修改时间
/// </summary>
public DateTime? UpdateDateTime { get; set; }
/// <summary>
/// 软删除标志
/// </summary>
public bool IsDelete { get; set; }
/// <summary>
/// 预留字段1
/// </summary>
public string ExtFiled1 { get; set; }
/// <summary>
/// 预留字段2
/// </summary>
public string ExtFiled2 { get; set; }
} /// <summary>
/// 系统用户操作日志
/// </summary>
public class OperateLog : BaseEntity
{
/// <summary>
/// 一级菜单名
/// </summary>
public string LevelOneMenuName { get; set; }
/// <summary>
/// 二级菜单名
/// </summary>
public string LevelTwoMenuName { get; set; }
/// <summary>
/// 三级菜单名
/// </summary>
public string LevelThreeeMenuName { get; set; }
/// <summary>
/// 操作备注
/// </summary>
public string OperateRemark { get; set; }
/// <summary>
/// 操作人Id
/// </summary>
public long UserId { get; set; }
/// <summary>
/// 操作人姓名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 操作结果
/// </summary>
public string OperateResult { get; set; }
/// <summary>
/// 操作结果详情
/// </summary>
public string OperateResultInfo { get; set; } }
public class OperateLogConfig : IEntityTypeConfiguration<OperateLog>
{ public void Configure(EntityTypeBuilder<OperateLog> builder)
{
builder.HasComment("系统用户操作日志表");
builder.Property(t => t.Id).HasComment("主键Id"); builder.Property(t => t.LevelOneMenuName).HasComment("一级菜单名").HasMaxLength();
builder.Property(t => t.LevelTwoMenuName).HasComment("二级菜单名").HasMaxLength();
builder.Property(t => t.LevelThreeeMenuName).HasComment("三级菜单名").HasMaxLength();
builder.Property(t => t.OperateRemark).HasComment("操作备注").HasMaxLength();
builder.Property(t => t.UserId).HasComment("操作人Id").HasMaxLength();
builder.Property(t => t.UserName).HasComment("操作人姓名").HasMaxLength();
builder.Property(t => t.OperateResult).HasComment("操作结果").HasMaxLength();
builder.Property(t => t.OperateResultInfo).HasComment("操作结果详情").HasMaxLength(); builder.Property(t => t.CreateDateTime).HasComment("创建时间");
builder.Property(t => t.UpdateDateTime).HasComment("修改时间");
builder.Property(t => t.IsDelete).HasComment("软删除标志 ,true表示删除,false表示未删除").HasDefaultValue(false);
builder.Property(t => t.ExtFiled1).HasComment("预留扩展字段1").HasMaxLength();
builder.Property(t => t.ExtFiled2).HasComment("预留扩展字段2").HasMaxLength();
}
}
5. 在Startup 文件中的ConfigureServices方法中, 配置Mysql 的连接服务
public void ConfigureServices(IServiceCollection services)
{
var connection = "Server=localhost;database=omc;uid=root;port=3306;pwd=123321";
services.AddDbContext<DataContext>(options => options.UseMySql(connection));
services.AddControllers();
}
6. 打开程序包管理控制台, 输入PM 命令,即可得到想要的结果
Add-Migration EFCore
该命令会在程序中自动生成所需的对应数据库的脚本文件,截图如下


update-database EFCore
则会执行上图中的Migrations中的程序文件,会在所连接的数据库中生成对应的表结构,截图如下



用EFCore的 FluentAPI 方式生成MySql 带注释的数据库表结构的更多相关文章
- powerdesigner生成mysql带注释的ER图
1.安装PowerDesigner的 参考 https://blog.csdn.net/sinat_34104446/article/details/79885141 2配置逆向工程 2.1新建模型p ...
- Erwin 生成 mysql 带注释(comment )的脚本
Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment. 在百度无数次无法解决下,又FQ谷歌,在一个日 ...
- PHP+MYSQL实现输出打印数据库表结构和输出表内容
效果图1 <form id="form1" name="form1" action="2.php" method="get& ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- 如何将excel 数据库表结构生成powerdesign物理模型
Option Explicit Dim mdl ' the current model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox &q ...
- MySQL 大数据量修改表结构问题
前言: 在系统正常运作一定时间后,随着市场.产品汪的需求不断变更,比较大的一些表结构面临不得不增加字段的方式来扩充满足业务需求: 而 MySQL 在体量上了千万.亿级别数据的时候,Alter Tab ...
- MySQL导出数据库、数据库表结构、存储过程及函数【用】
一.导出数据库 我的mysql安装目录是D:\Program Files\MySQL\MySQL Server 5.5\bin\,导出文件预计放在D:\sql\ 在mysql的安装目录执行命令: my ...
- Mybatis总结之如何自动生成数据库表结构
一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate, ...
随机推荐
- 【转】iOS 7免费设计资源汇总
原文链接:http://mobile.51cto.com/hot-406317.htm#585532-tsina-1-28470-7e393678b940a4d55500bf3feae3d2e9 以下 ...
- P1551 亲戚 并查集
P1551 亲戚 题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么 ...
- css文字溢出显示省略号
1.单行文字溢出显示省略号. overflow: hidden; text-overflow: ellipsis; white-space: nowrap;//文本不换行 2.多行文本溢出显示省略号. ...
- 关于SDWebImage的一点小坑
做项目遇到一个问题,是用sd加载图片,明明本地有图片,使用sd的内部方法也可以拿到那些个图片,但是就是加载缓慢,如果网络还行,网络加载图片都比加载本地图片快.而使用[[SDImageCache ...
- 让你的 Linux 命令骚起来
目录 管道符号 " | " grep sed awk sort comm uniq tr cat head tail wc find tsort tee 「>」重定向符号 「 ...
- numpy 数组的计算
一.数组和数的计算 数组和数计算,数组中的每个元素和数进行计算 1.加 import numpy as np arr1 = np.arange(12).reshape(3, 4) print(arr1 ...
- restframework 分页组件、响应器
一.分页组件 1.PageNumberPagination a.全局配置 导入模块 from rest_framework.pagination import PageNumberPagination ...
- SSAS Tabular表格模型实现动态权限管理
最近忽然对SSAS产生了浓厚兴趣,我看博客园上也米有写关于SSAS 2016下表格模型实现动态权限管理的文章,最近鼓捣了一下微软的样例,鼓捣好了,把过程中遇到的一些问题写出来,抛砖引玉,也算给自己一个 ...
- MyBatis4——一对一、一对多关联查询
关联查询: 一对一: 1.业务扩展类 核心:用resultType指定的类的属性包含多表查询的所有字段. 2.resultMap 通过添加属性成员建立两个类之间的连接 <!--利 ...
- Nmap使用教程(二)
TCP空闲扫描 这种先进的扫描方法允许对目标进行一个真正的盲目TCP端口扫描(即没有数据包从你的真实IP地址发送到目标).相反独特的侧信道攻击利用僵尸主机上可预测的IP分段ID序列生成来收集关于目标的 ...