开源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基础服务, ...
随机推荐
- Codeforces Round 832 (Div2)
Swap Game Alice 和 Bob 两个人在玩游戏. 有一个长度为 \(n\) 的序列 \(a\),Alice 和 Bob 两人轮流完成一个操作,Alice 先开始. 每个人可以将数列的第一个 ...
- 通过su - userName 切换用户,无法通过userdel -r 删除用户?
需要通过exit退出用户,su只是进行了切换,并没有关闭
- Abp Vnext Vue Element UI实现
Abp Vnext Vue Element UI实现版本开箱即用的中后台前端/设计解决方案 链接 AbpPro Vben5 Vue Element Plus 预览 点击查看效果 文档地址 点击查看文档 ...
- CVE-2023-0461 漏洞分析与利用
PS: 文章首发于补天社区 漏洞分析 tcp_set_ulp里面会分配和设置 icsk->icsk_ulp_data,其类型为 tls_context tcp_setsockopt do_tcp ...
- 鸿蒙UI开发快速入门 —— part08: 组件状态管理之@Provide/@Consume装饰器
1.说在前面的话 在此之前,我们已经先后学习了三个装饰器:@State.@Props.@Link,它们的功能和使用场景分别是什么?暂停会议一下. 我们目前已经可以处理组件内状态(@State),也可以 ...
- 10C++选择结构(4)——教学
一.switch语句 (第25课 成绩等级) 问题:风之巅小学规定,若测试成绩大于或等于90分为"A",大于或等于70分小于90分为"B",大于或等于60分小于 ...
- 在 Ubuntu GUI 中以 root 身份登录
参考:https://zhuanlan.zhihu.com/p/610049537?utm_id=0 有一些桌面用户想以 root 身份登录.这不是什么明智之举,但肯定是可以做到的. 默认情况下,Ub ...
- 使用docker-compose快速部署Prometheus+grafana环境
由于最近公司服务频繁出问题,老板很生气,下面的人都很不好过,于是老大让加一下业务监控,来观察线上数据状态.但是由于qa环境数据量太少,所以自己搭建了一套环境做相关监控,并且写了个脚本模仿生产上的数据, ...
- FISCO BCOS 控制台 部署合约 调用 查看已部署合约的地址
deploy 部署合约.(默认提供HelloWorld合约和TableTest.sol进行示例使用) 参数: 合约路径:合约文件的路径,支持相对路径.绝对路径和默认路径三种方式.用户输入为文件名时,从 ...
- oracle用命令执行sql脚本文件
当sql命令过多(sql文件过大)时,用plsql执行时比较慢而且容易超时,此时可以用sqlplus命令直接执行sql脚本文件,方法如下: 1.sqlplus登录 >sqlplus userna ...