Abp框架,EF 生成迁移文件时,自动添加表和字段注释内容

在使用 abp 框架,或者ef 的时候都会遇到一个问题,就是建实体后要将实体描述生成到数据库中,就需要手动去添加

[Comment("注释内容")]

注解,这样相当于手动写两次注释(即使你是 Ctrl + C),这样不免有些麻烦,何况还会有遗漏的时候;

经过在网上的搜索:

Ef Core花里胡哨系列(6) XML注释同步到数据库注释-CSDN博客

通过 该作者 提供的代码,做了如下修改:

在项目的 xxx.xxx.EntityFrameworkCore 层下,重写 "xxxDbContext" 类中的  OnModelCreating 方法,代码如下:

/// <summary>
/// 重写为模型创建时附带注释内容
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{try{foreach (var entityType in modelBuilder.Model.GetEntityTypes()){var typeComment = GetDescription(entityType.ClrType.FullName, "");// 存在注释才去生成if (!typeComment.IsNullOrWhiteSpace())// modelBuilder.Entity(entityType.ClrType).ToTable(t => t.HasComment(typeComment));modelBuilder.Entity(entityType.ClrType).HasComment(typeComment);foreach (var property in entityType.ClrType.GetProperties().Where(x => x.IsPublic() && x.CanWrite && x.CanRead)){// 判断是否为值类型,string 除外if (!property.PropertyType.IsValueType && typeof(string) != property.PropertyType)continue;// (这里是个人对类型的熟悉和练手)//if (!property.PropertyType.IsValueType)//{//    // 对类型进行判断,提出来写美观 ,过滤导航属性 IEntity//    if (property.PropertyType.IsGenericType || property.GetSetMethod().IsVirtual)//        continue;//    // bus_Problem//    if (property.PropertyType.GetInterfaces().Any(p => p.IsGenericType && typeof(IEntity<>) == p.GetGenericTypeDefinition()))//        continue;//}var propertyComment = GetDescription(entityType.ClrType.FullName, property.Name);// 存在注释才去生成if (!propertyComment.IsNullOrEmpty()){modelBuilder.Entity(entityType.ClrType).Property(property.Name).HasComment(propertyComment);}}}}catch (Exception ex){Console.WriteLine(ex.ToString());throw;}base.OnModelCreating(modelBuilder);
}/// <summary>
/// 获取 xml 描述
/// </summary>
/// <param name="xmlFullName">完整的类型名称</param>
/// <param name="columnName">字段名称</param>
/// <returns></returns>
private string GetDescription(string xmlFullName = "", string columnName = "")
{// 领域层 xml文件名称地址,记得项目输出 xml 文件哦!!string path = Path.Combine(AppContext.BaseDirectory, "xxx.xxx.Core.xml");// 加载xmlXmlDocument xml = new XmlDocument();xml.Load(path);// 查询节点XmlNode classNode = xml.SelectSingleNode($"//member[@name='T:{xmlFullName}']");if (classNode == null){return string.Empty;}if (columnName.IsNullOrEmpty()){return classNode.InnerText.Replace("\n", "").Replace("\r", "").Trim();}else{var propertyNode = xml.SelectSingleNode(($"//member[@name='P:{xmlFullName}.{columnName}']"));if (propertyNode == null){return string.Empty;}return propertyNode.InnerText.Replace("\n", "").Replace("\r", "").Trim();}
}

最终运行 命令

Add-Migration init

生成出的迁移文件就会包含注释;

这里也在网上找到一个不错的 sql文档生成工具,附带链接一下给大家,好东西免得沉没了。

SmartSQL: 🔥🔥🔥 一款方便、快捷的数据库文档查询、生成工具,支持SqlServer/Oracle/MySql/PostgreSQL/SQLite数据库表结构文档查询、生成;导出文档支持CHM、Word、Excel、PDF、Html、Xml、Json、MarkDown等多种格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@Autowired和@Resource的区别

Autowired 是 Spring 提供的注解&#xff0c;Resource 是 JDK 提供的注解。 Autowired 默认的注入方式为byType&#xff08;根据类型进行匹配&#xff09;&#xff0c;Resource默认注入方式为 byName&#xff08;根据名称进行匹配&#xff09;。 当一个接口存在多个实现类的情…

景源畅信电商:抖音小店有哪些比较热门的宣传方法?

抖音小店的热门宣传方法&#xff0c;是许多商家关注的焦点。在数字化营销时代&#xff0c;有效的宣传手段不仅能提升品牌知名度&#xff0c;还能吸引潜在消费者&#xff0c;促进销售。以下是针对抖音小店热门宣传方法的详细阐述&#xff1a; 一、短视频内容营销 作为抖音的核心…

训练:shell_day01-10

shell_day01-10 文章目录 shell_day01-100.前言1.day012.day023.day034.day045.day056.day067.day078.day089.day0910.day10 0.前言 训练素材来自B站阿铭linux&#xff1a; https://www.bilibili.com/video/BV1ih4y1Y7nh/?spm_id_from333.788&vd_source9f6a57780f9760d9cd…

什么是网页反作弊

在搜索引擎技术中&#xff0c;网页反作弊是指一种防止网页排名被恶意操纵的技术。搜索引擎会根据特定的算法来评估网页的相关性和质量&#xff0c;以决定其在搜索结果中的排名。然而&#xff0c;有些人可能会尝试通过各种不正当的手段来提高自己网页的排名&#xff0c;这被称为…

【进程等待】阻塞等待 | options非阻塞等待

目录 waitpid 阻塞等待 options&非阻塞等待 pid_t返回值 阻塞等待VS非阻塞等待 waitpid 回顾上篇&#xff1a; pid_ t waitpid(pid_t pid, int *status, int options); 返回值&#xff1a; 当正常返回的时候waitpid返回收集到的子进程的进程ID&#xff1b;如果设置了…

PSCA电源管理软件栈示例

安全之安全(security)博客目录导读 目录 1、移动通讯系统 2、基础设施系统 本博客就PSCA电源管理软件栈进行举例&#xff0c;主要以移动通讯系统和基础设施系统为例来说明。 1、移动通讯系统 图3.4显示了一个可以在基于Linux的移动设备中实现的电源管理堆栈示例。 在Linux…

linux允许其它用户读自己某个文件夹

用户 tom 有个装数据的文件夹 /data/tom/data1/&#xff0c;想授权给用 jerry 读。其中 /data/ 是公共目录&#xff1a; drwxr-sr-x 3301 root root 80K May 2 15:15 /data而 /data/tom/ 的初始权限是&#xff1a; drwx------ 10 tom Research 298 May 2 12:32 /data/tom/d…

使用WPF中的Trigger实现按钮样式动态更改

使用WPF中的Trigger实现按钮样式动态更改 在Windows Presentation Foundation (WPF)中&#xff0c;Trigger 是一种强大的机制&#xff0c;它可以基于控件的属性值来动态更改控件的样式。这篇博客将介绍如何使用Trigger实现按钮在鼠标悬停时样式动态更改的效果。我们将详细讨论为…

MySQL全局锁、表级锁、行锁、死锁、索引选择

文章目录 全局锁表级锁表锁元数据锁 MDL 如何安全的给小表添加字段1. 理解和监控长事务2. 使用NOWAIT和WAIT语法示例 3. 选择合适的时间窗口4. 分阶段执行5. 使用在线DDL工具 行锁死锁普通索引和唯一索引的选择索引基础业务场景分析性能考量实践建议索引及其选择机制索引选择错…

【C++ list所有函数举例如何使用】

C 中的 std::list 是一个双向链表&#xff0c;提供了在列表中添加、删除、访问元素等操作的方法。以下是一些常用的 std::list 函数以及如何使用它们的示例&#xff1a; push_back(const T& value): 在列表的末尾添加一个值为 value 的元素。 std::list<int> mylis…

Faiss核心解析:提升推荐系统的利器【AI写作免费】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

STM32使用L9110驱动电机自制小风扇

1.1 介绍&#xff1a; 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子&#xff0c;并具有抗干扰特性&#xff1a;具有高电流驱动能力&#xff0c;两个输出端子可直接驱动直流电机&#xff0c;每个输出端口可提供750800mA动态电流&#xff0c;其峰值…

【适用全主题】WordPress原创插件:弹窗通知插件 支持内容自定义

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 适用于所有WordPress主题的弹窗插件 一款WordPress原创插件&#xff1a;弹窗通知插件 支持内容自定义 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1…

【GoLang基础】map是什么?

问题引出&#xff1a; Go语言中map是什么&#xff1f; 解答&#xff1a; map 是一种集合型数据结构&#xff0c;用于存储键值对&#xff0c;并提供了快速的查找、插入和删除操作。以下是更深入的介绍和使用 map 的注意事项&#xff1a; 1. 声明和初始化 在 Go 中声明和初始化…

【java.io.IOException: java.lang.IllegalArgumentException: db.num is null】

默认用户名&#xff1a;nacos 密码&#xff1a;nacos解决方法&#xff1a; a)在conf目录下将nacos-mysql.sql脚本创建完成&#xff1b; b)修改application.properties&#xff0c;在内容里添加如下内容 spring.datasource.platformmysql db.num1 db.url.0jdbc:mysql://localho…

网络安全零信任学习2:零信任概念

《白话零信任》第2章&#xff1a; 零信任假设最坏的情况已经发生&#xff0c;一切都不可信&#xff0c;在此基础上执行 最严格的动态持续认证和访问控制策略。 &#xff08;1&#xff09;网络不可信&#xff1a;网络始终充满威胁&#xff0c;内网与外网没有不同&#xff0c;网络…

有刷电机、无刷电机

阅读引言&#xff1a; 最近在备赛&#xff0c; 自己之前虽然用过电机&#xff0c; 但是发现在一些高要求的应用场景&#xff0c; 发现自己对电机的知识理解得不是很透彻&#xff0c; 所以写下这篇文章。 目录 一、 有刷电机内部原理 二、有刷电机一些关键参数 三、无刷电机内…

2024OD机试卷-英文输入法 (java\python\c++)

题目:英文输入法 题目描述 主管期望你来实现英文 输入法 单词联想功能。 需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列, 如果联想不到,请输出用户输入的单词前缀。 注意: 英文单词联想时,区分大小写缩…

机器学习初学者 6 个核心算法!建议收藏,反复观看!

今天再来介绍机器学习算法的基本概念和适用场景&#xff01; 首先&#xff0c;引用一句英国统计学家George E. P. Box的名言&#xff1a;All models are wrong, but some are useful. 没有哪一种算法能够适用所有情况&#xff0c;只有针对某一种问题更有用的算法。 也就是说&…

STM32理论 —— μCOS-Ⅲ(新)

文章目录 1. 任务调度器1.1 抢占式调度 μCos-Ⅲ全称是Micro C OS Ⅲ&#xff0c;由Micriμm 公司发布的一个基于C 语言编写的第三代小型实时操作系统(RTOS)&#xff1b; RTOS 与裸机相比最大的优势在于多任务管理与实时性&#xff0c;它提供了多任务管理和任务间通信的功能&a…