一個支持 CodeFirst/DbFirst/ModelFirst 的資料庫小工具

来源:https://www.cnblogs.com/weihanli/archive/2020/02/15/powerful-database-tool-for-dotnet.html

DbTool 是一個支持 CodeFirst/DbFirst/ModelFirst 的資料庫小工具,原本是基於 dotnet framework WinForm 實現的,在 1.1.0 版本更新中使用 dotnet core 3.1 基於 WPF 重寫了,並實現了一個簡單的基於插件模式開發模式並引入... ...


一個支持 CodeFirst/DbFirst/ModelFirst 的資料庫小工具

Intro

DbTool 是一個支持 CodeFirst/DbFirst/ModelFirst 的資料庫小工具,原本是基於 dotnet framework WinForm 實現的,在 1.1.0 版本更新中使用 dotnet core 3.1 基於 WPF 重寫了,並實現了一個簡單的基於插件模式開發模式並引入了多語言的基礎支持。

資料庫當前支持 SqlServer 和 MySql,可以自己擴展其他類型資料庫。

可以利用這個小工具生成資料庫表對應的 Model,並且會判斷數據表列是否可以為空,可以為空的情況下會使用可空的數據類型,如 int? , DateTime? ,如果資料庫中有列描述信息,也會生成在屬性名稱上添加列描述的註釋,支持導出多個表;可以導出到Excel,可以根據Excel欄位文檔生成Sql,資料庫表誤刪除又沒有備份的時候就很有幫助了,而且支持反向的根據生成的Model去生成創建資料庫表的Sql(供參考)。

基本功能

功能一覽

DbFirst

ModelFirst

CodeFirst

Settings

功能說明

  1. DbFirst

    1. 導出資料庫表到Model

      1. 設置資料庫連接字元串,並連接資料庫
      2. 設置導出 Model 選項
      3. 選擇要導出 Model 的資料庫表
      4. 導出 Model
    Model 設置選項說明:
    • model的命名空間:生成的 model 所在的命名空間,預設為 Models,不可為空,為空則使用預設值Models
    • model首碼:表名的基礎上加的首碼,預設為空
    • model尾碼:表名的基礎上加的尾碼,預設為空
    • 生成私有欄位,預設為 false,如果為false則使用自動屬性的代碼風格,反之,使用傳統 get;set; 風格代碼,如:
      ``` csharp
      public int Id { get; set; } //自動屬性風格代碼

      private int id1;
      public int Id1 { get{ return id1; } set { id1 = value; } } //傳統get;set風格代碼
      ```
    • 生成 Description Attribute,預設值為 true,如果為true則會在屬性欄位上生成一個[Description]的Attribute,如果為false則不生成,效果如下:

      /// <summary>用戶名</summary>
      [Description("用戶名")]
      public string UserName { get;set; }
    • 生成 Model 名稱的規則說明:生成的Model的名稱由首碼和表名稱及尾碼拼接而成,如果表名以 tabtab_tbltbl_這些開頭,則會先把這些移除掉再拼接,可以通過自定義插件擴展

    1. 導出資料庫表到Excel

      1. 設置資料庫連接字元串,並連接資料庫
      2. 選擇要導出到 Excel 的資料庫表
      3. 導出到 Excel
  2. ModelFirst

    1. 可以手動填寫信息或者先選擇 Excel 導入
    2. 只生成 Sql 語句,不會自動在資料庫里創建表,根據生成的 Sql 語句再創建表
  3. CodeFirst

    1. 根據已有的 Model 生成創建表的 sql ,欄位註釋會從屬性的 Description Attribute 中獲取
    2. 根據需要設置是否生成資料庫描述 sql
    3. 左側生成表欄位信息,右側生成創建表的sql,生成的 Sql 僅供參考,請自行根據需要調整數據類型以及欄位長度
  4. Settings

    1. 修改預設資料庫連接字元串
    2. 修改預設資料庫類型
    3. 修改預設語言(1.1.0 版本需要重啟應用)

插件擴展

Packages

目前的 packages:

  • DbTool.Core DbTool 用於擴展的介面定義,幫助類
  • DbTool.DbProvider.MySql DbTool 對於 MySql 的支持
  • DbTool.DbProvider.SqlServer DbTool 對於 SqlServer 的支持

擴展方式

  1. 擴展資料庫支持,實現 IDbProvider
  2. 擴展導出方式,實現 IDbDocExporter,當前支持導出 Excel
  3. 擴展 Model 代碼生成方式,實現 IModelCodeGenerator,根據資料庫表信息生成 Model
  4. 擴展 Model 名稱表名稱轉化,實現 IModelNameConverter,也可以繼承 DefaultModelNameConverter,改寫某一個實現

自定義擴展使用方式

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

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

  1. 新建一個項目 DbTool.DbDocExporter.Markdown,並引用 DbTool.Core
  2. 添加 MarkdownDbDocExporter 類並實現 IDbDocExporter 介面
  3. dotnet build 生成 dll,並將生成的 dll 放在 plugins 目錄下

Reference


您的分享是我們最大的動力!

更多相關文章
  • 為什麼要用函數 現在python屆發生了一個大事件,len方法突然不能直接用了。。。 然後現在有一個需求,讓你計算'hello world'的長度,你怎麼計算? 這個需求對於現在的你其實不難,我們一起來寫一下。 s1 = "hello world" length = 0 for i in s1: l ...
  • 慕課網-悟空-玩轉Java併發工具,精通JUC,成為併發多面手-筆記 微雲:https://share.weiyun.com/81aa12bb98016e200add31fb8e191cdf百度網盤:鏈接:https://pan.baidu.com/s/1IiClTkQwFJgBL2NqlptKbA ...
  • 一、前言 從學單片機開始鼓搗C語言,到現在為了學CV鼓搗Python,期間在CSDN、簡書、博客園和github這些地方得到了很多幫助,所以也想把自己做的一些小東西分享給大家,希望能幫助到別人。記錄人生的第一篇博客,mark。 二、圖像檢測步驟 1. 讀取兩張圖片 第一張是需要檢測的小物體,第二章圖 ...
  • 多態的體現 父類的引用指向了自己的子類對象。 父類的引用也可以接受自己的子類對象。 代碼體現 運行結果 多態的前提 必須是類與類之間有關係。要麼是繼承關係,要麼實現。 存在覆寫關係。 多態利弊 利處 多態的出現大大地提高了程式的拓展性。 弊端 提高了拓展性,但是只能使用父類的引用訪問父類中的成員,不 ...
  • 今天給大家翻譯一篇由ASP.NET首席開發工程師 "James Newton King" 前幾天發表的一篇博客,文中帶來了一個實驗性的產品gRPC Web。大家可以點擊文末的討論帖進行相關反饋。我會在文章末尾給出原文鏈接。全部譯文如下: 我很高興宣佈通過.NET對gRPC Web進行實驗性支持。gR ...
  • .NET Core WebAPI post參數傳遞時後端的接收方式 1. 實體類 2. dynamic動態類型 3. JObject參數 4. 單值參數(字元串參數) A.前端Post請求代碼 B.後端接收參數方式 1. 實體類 實體類是比較簡單的一種傳參方式,使用頻率非常高。 1. 添加實體類 2 ...
  • 通過使用變換(transform),許多繪圖任務將更趨簡單;變換是通過不加通告地切換形狀或元素使用的坐標系統來改變形狀或元素繪製方式的對象。在WPF中,變換由繼承自System.Windows.Media.Transform抽象類的類表示。下表列出了這些類。 表 變換類 從技術角度看,所有變換都使用 ...
  • 概述 上兩篇(asp.net core 3.x 身份驗證-1涉及到的概念、asp.net core 3.x 身份驗證-2啟動階段的配置)介紹了身份驗證相關概念以及啟動階段的配置,本篇以cookie身份驗證為例來大致說明asp.net core中的身份驗證原理。如果我們的應用只考慮瀏覽器使用,且不考慮 ...
一周排行
  • 《ASP.NET MVC 企業級實戰》 [作者] (中) 鄒瓊俊[出版] 清華大學出版社[版次] 2017年04月 第1版[印次] 2019年08月 第6次 印刷[定價] 89.00元 【第01章】 (P021) 只有在 Lambda 有一個輸入參數時,括弧才是可選的,否則括弧是必需的。 使用空括弧 ...
  • 上一篇(https://www.cnblogs.com/meowv/p/12971041.html)使用HtmlAgilityPack抓取壁紙數據成功將圖片存入資料庫,本篇繼續來完成一個全網各大平臺的熱點新聞數據的抓取。 同樣的,可以先預覽一下我個人博客中的成品:https://meowv.com/ ...
  • 前言 請了一天假後回公司,同事跟我說使用Newtonsoft.json序列化TreeView對象的時候出現報錯; 啊!什麼?這個類庫不是能夠序列化所有東西嗎?真的很懵逼,也是我第一次使用這個類庫出現問題! 問題異常 異常信息 : Newtonsoft.Json.JsonSerializationEx ...
  • 簡單瞭解下麵詞語的意思 節點:二叉樹中每個元素都稱為節點 葉子節點(簡稱:葉子):度為0的節點,葉子節點就是樹中最底段的節點,葉子節點沒有子節點,也叫終端結點 分枝節點:度不為0的結點 節點的度:二叉樹的度代表某個節點的孩子或者說直接後繼的個數,簡單說就是一個節點擁有的子樹數 樹的度: 樹中最大的結 ...
  • C# 中的LINQ 提供了兩種操作方式,查詢表達式和查詢操作符,所有的查詢表達式都有對應的查操作符類替代,查詢表達式有點“類” SQL,在代碼中寫SQL,總覺得不夠“優雅”,使用查詢操作符就顯得“優雅”很多, 本系列就來對所有的LINQ 標準操作符進行一個全面的總結,這些操作符和我上篇文章總結的Rx ...
  • 在Startup ConfigureServices 註冊本地化所需要的服務AddLocalization和 Configure<RequestLocalizationOptions> public void ConfigureServices(IServiceCollection services ...
  • 為什麼需要持久化,以及Redis持久化的RDB方式在這篇文章講的已經很透徹了,足以弔打面試官了。而且此篇內容需要RDB文章的內容支持,所以建議先看下:看完這篇還不懂Redis的RDB持久化,你們來打我! 一、什麼是AOF 它也是Redis持久化的重要手段之一,aof->Append Only Fil ...
  • 先上圖: @IT程式猿 微博網友評論: @迢書:前同事的,親眼見過 @AvenGeeker:Bug 404 @科技州:這是要逼死強迫症 @小島一瞥:哈哈哈哈哈我老家的車 最後小編整理了一套技術資料不僅能精準消除技術盲點、累計面試經驗,更可以攻剋JVM、Spring、分散式、微服務等技術難題。 海量電 ...
  • 概括來說,分三步: 1,首先找到是哪個進程的CPU占有率飆到了100%。 2,根據進程號pid,定位到是哪個線程,找到對應線程的tid。 3,導出對應線程的dump日誌文件,分析日誌文件定位具體代碼。 要解決這個問題,你應該具備以下技能: 1,linux的top命令。 2,jvm監控工具jps。 3 ...
  • 寫在最後 程式員為何害怕【別人的代碼】呢?這讓我想起一個段子。 寫這段代碼時 只有上帝和我知道他是幹嘛的 現在 只有上帝知道了 別人的代碼,似乎總意味著冗長、晦澀、凌亂,給人一種不想靠近的感覺。搞笑的是,對於一些程式員而言,即使是自己的代碼,在一段時間之後自己再拿來看,也成了【別人的代碼】... 作 ...