开源EFCore 对比实体与实际数据库结构的工具-GZY.EFCoreCompare
GZY.EFCoreCompare 是一个用于 对比数据库结构和 EF Core 代码中的 DbContext 的库。
它基于 EF Core 的 Scaffolding 机制,生成 DatabaseModel(从数据库提取的模型),
并与代码中的 DbContext 进行比对,从而找出两者之间的差异。
开源项目地址:GZY.EFCoreCompare
检查数据库与代码是否匹配
- 通过 EF Core Scaffolding 解析数据库结构(
DatabaseModel)。 - 读取代码中的
DbContext及其EntityType实体定义。 - 对比两者的字段、表、主键、索引等内容。
- 通过 EF Core Scaffolding 解析数据库结构(
检测并生成对应的报表
- 发现 数据库中有但代码中没有的表(可能需要删除)。
- 发现 代码中有但数据库中缺失的表或字段(可能需要添加)。
- 发现 数据类型、索引、约束等的差异(可能需要修改)。
帮助团队进行数据库变更管理
- 在开发过程中,避免数据库和代码模型不同步。
- 适用于 DBFirst 和 CodeFirst 的开发模式,确保两者一致。
- 可用于 自动化 CI/CD 流水线,在部署前发现问题。
- 可用于 部署/更新后判断数据库是否标准,在部署后发现客户或线上的问题。
获取数据库结构
- 使用 EF Core Scaffolding 解析数据库,并生成
DatabaseModel。
- 使用 EF Core Scaffolding 解析数据库,并生成
读取代码中的
DbContext- 解析代码中的
DbContext及其实体。
- 解析代码中的
比对两者的差异
- 找出 表、字段、类型、索引、主键、外键 等方面的不同。
提供UI查看界面与Execl报告
- 提供 UI查看界面,用于图形化查看差异。
- 生成 差异报告,供开发人员参考。
1.直接使用 GZY.EFCoreCompare.Core 进行比对
直接在项目中通过Nuget引用GZY.EFCoreCompare.Core与对应数据库的驱动库,例:GZY.EFCoreCompare.MySql 库中,比对代码如下:
var compareEFcore= new CompareEFCore();
compareEFcore.CompareEfWithDbAsync(YourDbContext);
2. 集成图形化UI到项目中,进行持久化比对
- 在Web(MVC Raroz)或WebApi项目中通过Nuget引用
GZY.EFCoreCompare.UI与对应的数据库驱动,例如:GZY.EFCoreCompare.MySql - 在 Program或Startup中添加如下代码:
builder.Services.AddDbContext<TestDbContext>(options =>
{
string connStr = "";
options.UseMySql(connStr, new MySqlServerVersion(new Version(8, 0, 20)), builder => {
builder.SchemaBehavior(MySqlSchemaBehavior.Ignore);
});
}); //注入EFDbContext
builder.Services.AddEFCoreCompareUI(new CompareEFCoreConfig { CaseComparer=StringComparer.CurrentCultureIgnoreCase}); //需放在AddDbContext之后
app.UseEFCoreCompareUI(); //添加UI界面
在游览器输入地址:
http://localhost:5130/DBCompareUI,/DBCompareUI为UI的界面地址- 输入默认Basic校验账户,账户名:Admin 密码:123456
点击开始对比,进行比对
效果如下图:


开源EFCore 对比实体与实际数据库结构的工具-GZY.EFCoreCompare的更多相关文章
- ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...
- ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...
- 对比PG数据库结构是否一致的方法
如果版本升级涉及数据库更新,测试时要对比旧版数据库更新后是否和全新安装的是否一致,但是数据库结构很复杂的时候对比就很麻烦,postgre可以使用以下方法对比:pg_dump.exe –h 数据库IP ...
- 利用Navicat实现MySQL数据库结构对比和同步
在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...
- ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文
通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...
- SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005
New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...
- 微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异
微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异 前言:由于开发人员要靠工具吃饭,可能和开发工具.语言.环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多 ...
- MySQL系列(三)--数据库结构优化
良好的数据库逻辑设计和物理设计是数据库高性能的基础,所以对于数据库结构优化是很有必要的 数据库结构优化目的: 1.减少数据的冗余 2.尽量避免在数据插入.删除和更新异常 例如:有一张设计不得当的学生选 ...
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...
- 【Jhipster】升级/修改 数据库结构
前提 1.jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客 2.首先需要启动jhipster基础服务, ...
随机推荐
- docker 下载镜像配置
现在docker 安装镜像的时候,会发现下载不了镜像. 有网友提供了一些可用的镜像,亲测可用. { "registry-mirrors": [ "https://dock ...
- SPRING 动态注册BEAN
场景 有些情况下,不能直接使用BEAN的方式: @Bean(name = "storage") public DataSourceProxy storageDataSourcePr ...
- JavaScript ES6基础
1.let声明 1.let不像var有变量声明提升,未声明直接使用会报错 console.log(a); //undefined var a; console.log(b); //报错 let b; ...
- k8s 实战 3----副本集
副本集是什么?我们在前文中讲过什么是pod,简单来说pod就是k8s直接操作的基本单位.不了解的同学可以参考前文: k8s 实战 1 ---- 初识 (https://www.cnblogs.com/ ...
- 使用docker部署自己的网页版chatgpt
如果你有了一个Chat GPT账号想分享给多个人使用,最好还不用禾斗学上网别人就能访问,那么chatgpt-web这个项目可能刚好满足你的需求. 少点命令行,多点可视化,这里采用更直观的方式来搭建ch ...
- 腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库
随着数字化进程不断深入,数据呈大规模.多样性的爆发式增长.为满足更多样.更复杂的业务数据处理分析的诉求,湖仓一体应运而生.在Gartner发布的<Hype Cycle for Data Mana ...
- 【XML】学习笔记第二章-dtd
目录 XML-DTD DTD语句 基本声明语句 引用外部DTD DTD元素 四种元素类型 元素定义关键字 修饰符号 DTD中的属性 属性修饰 属性类型 DTD中的实体和符号 符号 坑 XML-DTD ...
- java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
一.概述 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位.目前主要使用公开的SM2.SM3.SM4三类算法,分别是非对称算法.哈希算法和对称算 ...
- hibernate错误org.hibernate.AnnotationException: No identifier specified for entity:
实体类继承BaseEntity时报错.解决方法:在属性或者get方法上加@Id@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(uniqu ...
- springboot~多节点应用里的雪花算法唯一性
雪花算法的唯一性,在单个节点中是可以保证的,对应kubernetes中的应用,如果是横向扩展后,进行多副本的情况下,可能出现重复的ID,这需要我们按着pod_name进行一个workId的生成,我还是 ...