前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >开源EFCore 对比实体与实际数据库结构的工具-GZY.EFCoreCompare

开源EFCore 对比实体与实际数据库结构的工具-GZY.EFCoreCompare

作者头像
GuZhenYin
发布2025-02-18 08:44:50
发布2025-02-18 08:44:50
5500
代码可运行
举报
文章被收录于专栏:GuZhenYin
运行总次数:0
代码可运行

前言

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 库中,比对代码如下:

代码语言:javascript
代码运行次数:0
复制
var compareEFcore= new CompareEFCore();
compareEFcore.CompareEfWithDbAsync(YourDbContext);

2. 集成图形化UI到项目中,进行持久化比对

  • 在Web(MVC Raroz)或WebApi项目中通过Nuget引用GZY.EFCoreCompare.UI与对应的数据库驱动,例如:GZY.EFCoreCompare.MySql
  • 在 Program或Startup中添加如下代码:
代码语言:javascript
代码运行次数:0
复制
 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
  • 点击开始对比,进行比对
  • 效果如下图:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
这个人很懒,什么都没有留下~
目录
  • 1.直接使用 GZY.EFCoreCompare.Core 进行比对
  • 2. 集成图形化UI到项目中,进行持久化比对
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档