使用.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,一经查实,立即删除!

相关文章

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

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

Windows环境下Dapr入门

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

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

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

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

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

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…

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

AntV&#xff0c;蚂蚁出品&#xff0c;前端数据可视化&#xff0c;有这一套就够了&#xff01;随着大数据的发展&#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 […

WPF ListBox样式去掉默认选中效果

次用到ListBox的时候&#xff0c;鼠标悬浮时&#xff0c;ListBoxItem的默认样式太丑了&#xff0c;设置了ItemTemplate也不管用&#xff0c;像这样的&#xff1a;经过几次尝试后&#xff0c;终于解决了这个问题&#xff0c;记录一下&#xff0c;以后就不用到处百度找了。。。其…

win8计算机安全模式,WIN8如何设置按F8进入安全模式

Win8/win10系统想进入安全模式就不是太容易的事了。之前的Win7和XP等系统可以通过在开机时按F8进入安全模式选择菜单。有什么方法可以设置让Win8/win10系统按F8直接进入安全模式菜单。下面学习啦小编向大家介绍让Win8/win10系统通过这种老办法按F8进入安全模式的方法&#xff0…

当你不喜欢一个人(一段话、一篇文章)的时候

为什么80%的码农都做不了架构师&#xff1f;>>> 我知道技术人员都喜欢争论&#xff0c;因为我也算半个。不过我总觉得&#xff0c;有些争论是没有必要存在的。因为沟通是以交流为目的的&#xff0c;若本身对方就不是来交流而是做宣传的&#xff0c;推销一种观点。那…

C# WPF框架Caliburn.Micro快速搭建

1. Caliburn是什么&#xff1f;Caliburn是Rob Eisenberg在2009年1月26日(Robs MIX10 talk "Build Your Own MVVM Framework")提出的一个MVVM类的开源框架。它是一套用于协助开发WPF&#xff0c;Silverlight&#xff0c;WP7和Win RT等的应用程序的库。Caliburn.Micro由…

怎么可以让计算机不能联网,我想让电脑:只能收发电子邮件,不能上网,怎样设置?...

2006-01-04 14:47:58用美萍卫士就可以。全部2006-01-04 14:47:582006-01-04 13:22:37第一种全部删除 最好的方式打开系统所在目录找到 IE 的所在地全部删除然后安装放火墙&#xff0c;以瑞星为例子~~~找到启动~~关闭HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVers…

火柴人_火柴人 x THANKSGIVING

滴水之恩当涌泉相报&#xff0c;THANKSGIVING是我们给予对方的温暖。很多时候我们却发现&#xff0c;帮助我们的人其实并不求回报。也许&#xff0c;当我们想要感恩得到的帮助时&#xff0c;更应该做的&#xff0c;是铭记他人的善意&#xff0c;并努力把这份温暖传递下去。2020…

Vim as Python IDE on windows

下载安装Python。 从Vim的网站下载vim,建议下Self-installing executable的版本。 编辑vim的配置文件_vimrc 拷贝vimrc_example里面的东东到_vimrc 去掉_vimrc里面的source $VIMRUNTIME/vimrc_example.vim 设置中文支持 "设置编码自动识别, 中文引号显示 "set fileen…

电脑上的ofd格式文件如何打开呢_OFD格式的文件怎么打开预览?,来充电吧

我们不管是在工作、学习、下载资源的时候都可能收到别人的文件&#xff0c;但是如果是word或者pfd格式还好&#xff0c;直接在电脑上就可以打开&#xff0c;但是如果是ofd格式的就很难打开了。工具/材料搜狗浏览器、DCS文档在线预览操作方法01打开我们的搜狗浏览器&#xff0c;…

MySql里的My是指谁?

Monty 是一个编程天才。19岁的时候就从赫尔辛基理工大学退学并找了份全职工作&#xff0c;因为在学校里已经不能再教他什么了。33岁的时候他发布了 MySQL&#xff0c;世界上最有名的开源数据库&#xff0c;除了一个库之外&#xff0c;他编写了数据库的全部东西。55岁的时候他抛…

要嫁就嫁程序猿——钱多话少死的早

1程序猿问科比&#xff1a;“你为什么这么成功&#xff1f; ”科比&#xff1a;“你知道洛杉矶凌晨四点是什么样子吗&#xff1f; ”程序猿&#xff1a;“知道&#xff0c;一般那个时候我还在写代码&#xff0c;怎么了&#xff1f;”科比&#xff1a;“额…….”2女神&#xff…

ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...

本篇文章给大家带来的内容是关于Ajax上传文件/照片时报错TypeError &#xff1a;Illegal invocation的解决方法&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。问题Ajax上传文件/照片时报错TypeError &#xff1a;Illegal in…