使用.NET开发的数据库小工具 DbTool
數(shù)據(jù)庫(kù)小工具 DbTool
Intro
DbTool 一個(gè)支持 DbFirst、ModelFirst 和 CodeFirst 的數(shù)據(jù)庫(kù)小工具。
DbFirst 是根據(jù)數(shù)據(jù)庫(kù)中的表信息生成代碼中的 Model,以及生成數(shù)據(jù)表結(jié)構(gòu)文檔
ModelFirst 是根據(jù)數(shù)據(jù)表信息或者數(shù)據(jù)表結(jié)構(gòu)文檔生成創(chuàng)建數(shù)據(jù)庫(kù)的腳本
CodeFirst 是指根據(jù) model 代碼生成數(shù)據(jù)庫(kù)表結(jié)構(gòu)信息以及創(chuàng)建數(shù)據(jù)表的 SQL 腳本
Features
1.5.0 版本新增加了數(shù)據(jù)庫(kù) PostgreSql 的支持,這也是支持 PostgreSql 的第一個(gè)版本,應(yīng)該會(huì)有一些問(wèn)題,如果有遇到問(wèn)題,歡迎提 issue 反饋哈
除此之外,新版本對(duì)于擴(kuò)展性方面做了一些改善和增強(qiáng),增加了更多的擴(kuò)展點(diǎn)
擴(kuò)展數(shù)據(jù)庫(kù)支持,實(shí)現(xiàn) IDbProvider,實(shí)現(xiàn)自己的數(shù)據(jù)庫(kù)邏輯或者增加其他數(shù)據(jù)庫(kù)的支持
擴(kuò)展文檔導(dǎo)出支持,實(shí)現(xiàn) IDbDocExporter,將數(shù)據(jù)庫(kù)表信息導(dǎo)出到文檔,默認(rèn)支持了 Excel 導(dǎo)出,可以自己擴(kuò)展其他的導(dǎo)出方式
擴(kuò)展文檔導(dǎo)入支持,實(shí)現(xiàn) IDbDocImporter 從數(shù)據(jù)庫(kù)文檔中獲取數(shù)據(jù)庫(kù)表信息,默認(rèn)從 Excel 導(dǎo)入也可以自己擴(kuò)展其他導(dǎo)入方式
擴(kuò)展 Model 代碼生成方式,實(shí)現(xiàn) IModelCodeGenerator,根據(jù)數(shù)據(jù)庫(kù)表信息生成代碼 Model,默認(rèn)支持 C# 代碼生成,也可以實(shí)現(xiàn)其他代碼的生成
擴(kuò)展從 Model 代碼中獲取數(shù)據(jù)表信息,實(shí)現(xiàn) IModelCodeExtractor,默認(rèn)從 C# 代碼中獲取數(shù)據(jù)表信息,也可以實(shí)現(xiàn)從其他代碼中獲取數(shù)據(jù)庫(kù)表信息
擴(kuò)展 Model 名稱表名稱轉(zhuǎn)化,實(shí)現(xiàn) IModelNameConverter,也可以繼承 DefaultModelNameConverter,改寫(xiě)某一個(gè)實(shí)現(xiàn),實(shí)現(xiàn)一些特殊的名稱轉(zhuǎn)換,比如 TBL_Notice => Notice
插件開(kāi)發(fā)指南
新建一個(gè)類庫(kù)項(xiàng)目,引用 DbTool.Core,并實(shí)現(xiàn)相應(yīng)的接口,實(shí)現(xiàn)對(duì)應(yīng)的邏輯,將生成的 dll 放在 DbTool 的 plugins 目錄下即可
舉個(gè)例子,自定義一個(gè) Markdown Exporter 插件
新建一個(gè)項(xiàng)目 DbTool.DbDocExporter.Markdown,并引用 DbTool.Core
添加 MarkdownDbDocExporter 類并實(shí)現(xiàn) IDbDocExporter 接口
dotnet build 生成 dll,并將生成的 dll 放在 plugins 目錄下
插件化實(shí)現(xiàn)方式
通過(guò)掃描 plugins 目錄,加載 dll 插件到默認(rèn)的 AssemblyLoadContext 中,并注冊(cè)需要的服務(wù)
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);} }對(duì)于 UI 界面,會(huì)動(dòng)態(tài)添加一些 Button 并綁定相應(yīng)的處理方法,實(shí)現(xiàn)代碼大致如下:
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
更多實(shí)現(xiàn)細(xì)節(jié)以及功能可以自己嘗試一下,看看源碼,除了開(kāi)發(fā)插件,你也可以直接修改源代碼來(lái)實(shí)現(xiàn)自己想要的功能哈~
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
總結(jié)
以上是生活随笔為你收集整理的使用.NET开发的数据库小工具 DbTool的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么 IEnumerable 没有提供
- 下一篇: Windows环境下Dapr入门