前言

GZY.EFCoreCompare 是一个用于 对比数据库结构和 EF Core 代码中的 DbContext 的库

它基于 EF Core 的 Scaffolding 机制,生成 DatabaseModel(从数据库提取的模型),

并与代码中的 DbContext 进行比对,从而找出两者之间的差异。

开源项目地址:GZY.EFCoreCompare

 欢迎start和提issues
主要用途
  • 检查数据库与代码是否匹配

    • 通过 EF Core Scaffolding 解析数据库结构(DatabaseModel)。
    • 读取代码中的 DbContext 及其 EntityType 实体定义。
    • 对比两者的字段、表、主键、索引等内容。
  • 检测并生成对应的报表

    • 发现 数据库中有但代码中没有的表(可能需要删除)。
    • 发现 代码中有但数据库中缺失的表或字段(可能需要添加)。
    • 发现 数据类型、索引、约束等的差异(可能需要修改)。
  • 帮助团队进行数据库变更管理

    • 在开发过程中,避免数据库和代码模型不同步。
    • 适用于 DBFirst 和 CodeFirst 的开发模式,确保两者一致。
    • 可用于 自动化 CI/CD 流水线,在部署前发现问题。
    • 可用于 部署/更新后判断数据库是否标准,在部署后发现客户或线上的问题。
对比流程
  • 获取数据库结构

    • 使用 EF Core Scaffolding 解析数据库,并生成 DatabaseModel
  • 读取代码中的 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的更多相关文章

  1. ASP.NET没有魔法——ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

  2. ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构

    大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...

  3. 对比PG数据库结构是否一致的方法

    如果版本升级涉及数据库更新,测试时要对比旧版数据库更新后是否和全新安装的是否一致,但是数据库结构很复杂的时候对比就很麻烦,postgre可以使用以下方法对比:pg_dump.exe –h 数据库IP ...

  4. 利用Navicat实现MySQL数据库结构对比和同步

    在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...

  5. ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文

    通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...

  6. 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 ...

  7. 微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异

    微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异 前言:由于开发人员要靠工具吃饭,可能和开发工具.语言.环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多 ...

  8. MySQL系列(三)--数据库结构优化

    良好的数据库逻辑设计和物理设计是数据库高性能的基础,所以对于数据库结构优化是很有必要的 数据库结构优化目的: 1.减少数据的冗余 2.尽量避免在数据插入.删除和更新异常 例如:有一张设计不得当的学生选 ...

  9. [转]oracle学习入门系列之五内存结构、数据库结构、进程

    原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...

  10. 【Jhipster】升级/修改 数据库结构

    前提 1.jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客 2.首先需要启动jhipster基础服务, ...

随机推荐

  1. JDBC【4】-- jdbc预编译与拼接sql对比

    在jdbc中,有三种方式执行sql,分别是使用Statement(sql拼接),PreparedStatement(预编译),还有一种CallableStatement(存储过程),在这里我就不介绍C ...

  2. apisix~路由前缀的正则匹配

    参考:https://apisix.apache.org/zh/docs/apisix/FAQ/ 在你提供的 Apache APISIX 路由配置中,vars 字段用于定义一些变量匹配规则.具体来说, ...

  3. postgres 在centos 安装

    执行如下命令安装POSTGRES sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86 ...

  4. [Cnblogs.Architecture][v20.5.1] 使用 AddLongToJsonConverter() 将 long 序列化为 string

    场景 浏览器的 JSON 反序列化无法完整将 long 类型转换为 number,最后一位会被四舍五入. 因此需要将 long 类型转为 string 发送到前端. 适用版本 v20.5.1 使用方法 ...

  5. CSS3 过渡和动画

    1.CSS过渡 含义:在没有过渡属性的时候,当一个元素的属性值发生变化时,浏览器就会将这个元素瞬间渲染成新属性值的样式.例如一个定位元素top:0,动态修改成top:100px,这个元素就瞬间跑到10 ...

  6. 在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification)

    在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification) Bundler & Minifier for Visual Studio 2019 Bun ...

  7. 在app內建web server

    这几年在三家企业都使用 app 內建 web server 的技术方案.效果很好. 该方案顾名思义,就是在 app 中加入一个 embed webserver 组件.组件和app运行于同一进程空间.程 ...

  8. CMake构建学习笔记19-OpenSSL库的构建

    1. 概述 OpenSSL是一个开源的加密工具包和库,主要实现了安全套接字层(SSL)和传输层安全(TLS)协议,以及各种加密算法.数字签名.消息摘要.加密证书等功能.这个库可以说是Web开发尤其是H ...

  9. 证书签名算法OID.1.2.156.10197.1.501

    证书签名算法OID.1.2.156.10197.1.501   证书签名算法OID为1.2.156.10197.1.501表示该证书使用的是基于SM3的SM2签名算法 1.SM2证书数据和RSA算法证 ...

  10. Qt编写推流综合应用示例-文件推流

    一.功能特点 1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件. 实时统计显示每个文件对应的访问数量.总访问数量.不同IP地址访问数量. 可指定多种模式,0-直接播放.1-下载播 ...