日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用.NET开发的数据库小工具 DbTool 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫小工具 DbTool

Intro

DbTool 一個支持 DbFirst、ModelFirst 和 CodeFirst 的數據庫小工具。

DbFirst 是根據數據庫中的表信息生成代碼中的 Model,以及生成數據表結構文檔

ModelFirst 是根據數據表信息或者數據表結構文檔生成創建數據庫的腳本

CodeFirst 是指根據 model 代碼生成數據庫表結構信息以及創建數據表的 SQL 腳本

Features

1.5.0 版本新增加了數據庫 PostgreSql 的支持,這也是支持 PostgreSql 的第一個版本,應該會有一些問題,如果有遇到問題,歡迎提 issue 反饋哈

除此之外,新版本對于擴展性方面做了一些改善和增強,增加了更多的擴展點

  • 擴展數據庫支持,實現 IDbProvider,實現自己的數據庫邏輯或者增加其他數據庫的支持

  • 擴展文檔導出支持,實現 IDbDocExporter,將數據庫表信息導出到文檔,默認支持了 Excel 導出,可以自己擴展其他的導出方式

  • 擴展文檔導入支持,實現 IDbDocImporter 從數據庫文檔中獲取數據庫表信息,默認從 Excel 導入也可以自己擴展其他導入方式

  • 擴展 Model 代碼生成方式,實現 IModelCodeGenerator,根據數據庫表信息生成代碼 Model,默認支持 C# 代碼生成,也可以實現其他代碼的生成

  • 擴展從 Model 代碼中獲取數據表信息,實現 IModelCodeExtractor,默認從 C# 代碼中獲取數據表信息,也可以實現從其他代碼中獲取數據庫表信息

  • 擴展 Model 名稱表名稱轉化,實現 IModelNameConverter,也可以繼承 DefaultModelNameConverter,改寫某一個實現,實現一些特殊的名稱轉換,比如 TBL_Notice => Notice

  • 插件開發指南

    新建一個類庫項目,引用 DbTool.Core,并實現相應的接口,實現對應的邏輯,將生成的 dll 放在 DbTool 的 plugins 目錄下即可

    舉個例子,自定義一個 Markdown Exporter 插件

  • 新建一個項目 DbTool.DbDocExporter.Markdown,并引用 DbTool.Core

  • 添加 MarkdownDbDocExporter 類并實現 IDbDocExporter 接口

  • 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

    總結

    以上是生活随笔為你收集整理的使用.NET开发的数据库小工具 DbTool的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。