使用.NET开发的数据库小工具 DbTool

数据库小工具 DbTool

Intro

DbTool 一个支持 DbFirstModelFirstCodeFirst 的数据库小工具。

DbFirst 是根据数据库中的表信息生成代码中的 Model,以及生成数据表结构文档

ModelFirst 是根据数据表信息或者数据表结构文档生成创建数据库的脚本

CodeFirst 是指根据 model 代码生成数据库表结构信息以及创建数据表的 SQL 脚本

Features

1.5.0 版本新增加了数据库 PostgreSql 的支持,这也是支持 PostgreSql 的第一个版本,应该会有一些问题,如果有遇到问题,欢迎提 issue 反馈哈

除此之外,新版本对于扩展性方面做了一些改善和增强,增加了更多的扩展点

  1. 扩展数据库支持,实现 IDbProvider,实现自己的数据库逻辑或者增加其他数据库的支持

  2. 扩展文档导出支持,实现 IDbDocExporter,将数据库表信息导出到文档,默认支持了 Excel 导出,可以自己扩展其他的导出方式

  3. 扩展文档导入支持,实现 IDbDocImporter 从数据库文档中获取数据库表信息,默认从 Excel 导入也可以自己扩展其他导入方式

  4. 扩展 Model 代码生成方式,实现 IModelCodeGenerator,根据数据库表信息生成代码 Model,默认支持 C# 代码生成,也可以实现其他代码的生成

  5. 扩展从 Model 代码中获取数据表信息,实现 IModelCodeExtractor,默认从 C# 代码中获取数据表信息,也可以实现从其他代码中获取数据库表信息

  6. 扩展 Model 名称表名称转化,实现 IModelNameConverter,也可以继承 DefaultModelNameConverter,改写某一个实现,实现一些特殊的名称转换,比如 TBL_Notice => Notice

插件开发指南

新建一个类库项目,引用 DbTool.Core,并实现相应的接口,实现对应的逻辑,将生成的 dll 放在 DbToolplugins 目录下即可

举个例子,自定义一个 Markdown Exporter 插件

  1. 新建一个项目 DbTool.DbDocExporter.Markdown,并引用 DbTool.Core

  2. 添加 MarkdownDbDocExporter 类并实现 IDbDocExporter 接口

  3. dotnet build 生成 dll,并将生成的 dll 放在 plugins 目录下

插件化实现方式

通过扫描 plugins 目录,加载 dll 插件到默认的 AssemblyLoadContext 中,并注册需要的服务

var pluginDir = ApplicationHelper.MapPath("plugins");
if (Directory.Exists(pluginDir))
{// load pluginsvar plugins = Directory.GetFiles(pluginDir).Where(_ => _.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)).ToArray();if (plugins.Length > 0){var assemblies = plugins.Select(AssemblyLoadContext.Default.LoadFromAssemblyPath).ToArray();var exportedTypes = assemblies.Select(x => x.GetExportedTypes()).SelectMany(t => t).Where(t => !t.IsInterface && !t.IsAbstract).ToArray();var pluginTypes = exportedTypes.Where(t => interfaces.Any(i => i.IsAssignableFrom(t))).ToArray();foreach (var type in pluginTypes){services.RegisterTypeAsImplementedInterfaces(type);}// load service modulesservices.RegisterAssemblyModules(assemblies);}
}

对于 UI 界面,会动态添加一些 Button 并绑定相应的处理方法,实现代码大致如下:

var codeGenerators = DependencyResolver.ResolveServices<IModelCodeGenerator>();
foreach (var generator in codeGenerators)
{var button = new Button(){Content = $"{_localizer["Export"]} {generator.CodeType} Code",Tag = generator,MaxWidth = 180,Margin = new Thickness(4)};button.Click += ExportModel_Click;ModelCodeGeneratorsPanel.Children.Add(button);
}

More

更多实现细节以及功能可以自己尝试一下,看看源码,除了开发插件,你也可以直接修改源代码来实现自己想要的功能哈~

References

  • https://github.com/WeihanLi/DbTool/blob/packages/README.md

  • https://github.com/WeihanLi/DbTool

  • https://github.com/WeihanLi/DbTool/blob/wpf-dev/src/DbTool/App.xaml.cs

  • https://github.com/WeihanLi/DbTool/blob/wpf-dev/src/DbTool/MainWindow.xaml.cs

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

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

相关文章

嵌入式linux学习步骤(三)

<五>【序】学习Linux开发近一年&#xff0c;由于我是实验室第一个从事这方面开发的&#xff0c;学习过程中遇到了很多问题&#xff0c;可是总是求师无门&#xff0c;只能一个人自己摸索&#xff0c;同时也充分利用了网络&#xff0c;参考了广大CSDN博友及相关论坛的帖子&…

竞赛发布|100万奖金寻DT时代“最强大脑”!

大赛背景“水利是农业的命脉、电力是工业的命脉、数据是信息产业的命脉”。DT时代&#xff0c;海量数据呈指数增长&#xff0c;源源不断汇入城市数据湖中&#xff0c;看似波澜不惊的湖面却蕴藏着改变世界的巨大能量&#xff0c;将推动政府智慧管理、产业升级发展、民生服务改善…

计算机硬件相关名词,计算机硬件基础名词解释

硬件基础名词解释流水线技术: 将功能部件分离、执行时间重叠的一种技术&#xff0c;它可以在增加尽可能少的硬件设备情况下有效地提高CPU性能。超流水线技术: 把流水段进一步细分&#xff0c;使各段的功能部件在每个时钟周期内被使用多次&#xff0c;这样&#xff0c;在一个时钟…

古登堡是垂直搜索引擎吗_网站排名,提高内容输出频率,就一定要对排名好吗?-SEO...

如果你在长期做百度SEO一定会有这样一个明显的感觉&#xff0c;通过每天大量的输出相关性的内容&#xff0c;实际上是有利于提高网站的抓取频率与整站的权重。 而对于百度搜索引擎而言&#xff0c;对方也确实有这么一个考量&#xff0c;用于衡量一个网站的活跃度与覆盖搜索需求…

Windows环境下Dapr入门

Dapr是Distributed Application Runtime&#xff08;分布式应用运行时&#xff09;的缩写。它是一个可移植的、事件驱动的运行时。下面介绍如何在Windows平台安装Dapr&#xff1a;安装Dapr CLIDapr CLI是使用Dapr相关功能的主要工具&#xff0c;您可以使用它来以Dapr Sidecar的…

ctcs2

ongoing.转载于:https://blog.51cto.com/liubinwei/543617

linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询

当您使用LINQ来处理数据库时&#xff0c;这种体验是一种神奇的体验&#xff0c;对吗&#xff1f;你把数据库实体像一个普通的收集&#xff0c;使用Linq中像Where&#xff0c;Select或者 Take&#xff0c;这些简单的使用就能让代码可用了。但是&#xff0c;让我们考虑一下这里是…

如何用Python画一个中国地图?

为什么是Python&#xff1f;先来聊聊为什么做数据分析一定要用Python或R语言。编程语言这么多种&#xff0c;Java, PHP都很成熟&#xff0c;但是为什么在最近热火的数据分析领域&#xff0c;很多人选择用Python语言&#xff1f;数据分析只是一个需求&#xff0c;理论上来讲&…

计算机二级ppt为客户制作演示文稿,计算机二级ppt真题:制作介绍北京ppt

1.演示文稿题1具体如图示。2.【打开】文件夹&#xff0c;选择【PPT素材.docx】&#xff0c;点击【选择】选定所有格式类似的文本(无数据)&#xff0c;点击【段落】&#xff0c;调整【大纲级别】1级。选择【蓝色文本】&#xff0c;点击【选择】选定所有格式相似的文本(无数据)&a…

牛气!.NET5电商平台轻松承接10亿GMV,只因做对了这个!

自从京东和唯品会转了Java..NET就一直缺乏高并发电商案例&#xff0c;.NET5能做高并发电商吗&#xff1f;必须的&#xff01;这里为大家分享一家上市电商公司项目案例&#xff1a;纯.NET5电商平台&#xff0c;轻松承接双11当天近10亿GMV&#xff01;系统架构为.NET5微服务Docke…

[笔记].STM32 BOOT[0:1]启动设置

BOOT[0:1] 0? 用户闪存存储器 10 系统存储器 11 内嵌SRAM转载于:https://www.cnblogs.com/yuphone/archive/2011/04/16/2017672.html

项目进度计划甘特图_项目管理进度计划表制作及甘特图绘制方法

全文总计1995字&#xff0c;需阅读5分钟&#xff0c;以下为正文&#xff1a;甘特图(Gantt Chart)又称横道图&#xff0c;它通过图示形象地表示特定项目的活动顺序与持续时间。Excel 2007/2010中&#xff0c; 通过堆积条形图实现。下面以Excel 2010为例来说明绘制步骤上图A列为某…

华科计算机课程设计,华中科大操作系统课程设计报告(附源码).doc

华中科技大学计算机学院操作系统课程设计报告班级&#xff1a;学号&#xff1a;姓名&#xff1a;彭博时间&#xff1a;2010年3月设计内容一&#xff1a;熟悉和理解Linux编程环境编写一个C程序&#xff0c;实现文件拷贝功能。2)编写一个C程序&#xff0c;使用下的图形库&#xf…

这份深度学习课程笔记获吴恩达点赞

吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图&#xff0c;这套信息图优美地记录了深度学习课程的知识与亮点。因此它不仅仅适合初学者了解深度学习&#xff0c;还适合机器学习从业者和研究者复习基本概念。机器之心认为这不仅仅是一份课程笔记&…

Android添加单元测试的方法与步骤

一、修改配置文件AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?><manifest xmlns:android"http://schemas.android.com/apk/res/android"package"cn.ycmoon.test.activity"android:versionCode"1"an…

带栩字的优美古诗句_带栩字有寓意的男孩名字

栩字的五行属木&#xff0c;用作人名时意指生动、传神之义&#xff1b;有栩栩如生、巧夺天工等好寓意&#xff0c;用于男孩取名时也是非常的好听有内涵&#xff0c;一起往下看看吧&#xff01;【一】栩字取名男孩名字古风的栩翰翰字是指长而坚硬的羽毛&#xff0c;亦指毛笔、文…

这套前端可视化框架,让数据栩栩如生!

AntV&#xff0c;蚂蚁出品&#xff0c;前端数据可视化&#xff0c;有这一套就够了&#xff01;随着大数据的发展&#xff0c;人们越来越多地使用数据分析来解决问题。为了提高数据分析的效率&#xff0c;各种先进的数据可视化工具应需而生&#xff0c;可以直接根据指定的数据源…

AlphaGo背后的力量:蒙特卡洛树搜索入门指南

我们都知道 DeepMind 的围棋程序 AlphaGo&#xff0c;以及它超越人类的强大能力&#xff0c;也经常会听到「蒙特卡洛树搜索」这个概念。事实上&#xff0c;蒙特卡洛树搜索是在完美信息博弈场景中进行决策的一种通用技术&#xff0c;除游戏之外&#xff0c;它还在很多现实世界的…

js vue中得延时器_Vue.js实现时分秒倒计时

我们平常浏览网页的时候&#xff0c;经常见到“距游戏公测1天2小时3分钟4秒”这样的倒计时器。时间如沙漏般一点点的减少&#xff0c;不仅能挑起用户的兴趣&#xff0c;而且让页面提升了一点逼格&#xff0c;还填补掉一些尴尬的空白位置。最近写得越来越多&#xff0c;有用没用…

文件的搜索

which 显示一个可执行文件的完整路径&#xff1b; [rootberyl ~]# which ls alias lsls --colortty /bin/ls whereis 搜索一个可执行工具及其相关配置、帮助 [rootberyl ~]# whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz find […