一个支持 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(供参考)。

基本功能

功能一览

功能说明

  1. DbFirst

    1. 导出数据库表到Model

      1. 设置数据库连接字符串,并连接数据库
      2. 设置导出 Model 选项
      3. 选择要导出 Model 的数据库表
      4. 导出 Model

    Model 设置选项说明:

    • model的命名空间:生成的 model 所在的命名空间,默认为 Models,不可为空,为空则使用默认值Models
    • model前缀:表名的基础上加的前缀,默认为空
    • model后缀:表名的基础上加的后缀,默认为空
    • 生成私有字段,默认为 false,如果为false则使用自动属性的代码风格,反之,使用传统 get;set; 风格代码,如:
      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

一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具的更多相关文章

  1. 一个支持DbFirst、ModelFirst和CodeFirst的数据库小工具DbTool

    DbTool 一个支持DbFirst.ModelFirst和CodeFirst的数据库工具. 简介 这是一个针对 SqlServer 数据库和 C# 开发语言的小工具,可以利用这个小工具生成数据库表对 ...

  2. 介绍一个开源的在线管理SQLServer的小工具--SQLEntMan

    近来有许多人问起SQL在线管理的问题,遂将以前用过的一个开源SQL 在线管理工具修改了一下,并分享. 看下效果图: 原项目的地址:http://sourceforge.net/projects/asp ...

  3. ruby利用Zip Gem写一个简单的压缩和解压的小工具

    在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合K ...

  4. 【游戏开发】Excel表格批量转换成CSV的小工具

    一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...

  5. 这些小工具让你的Android 开发更高效

    在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...

  6. spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

    项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...

  7. 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发

    准备工作 腾讯云服务器(Ubuntu),C++编程语言 由于想输出界面中包含中文,所以安装库 libncursesw5,依次输入下面三行命令 sudo apt-get install libncurs ...

  8. 开源一个IE下获取XPath小工具,支持32/64位

    背景是曾经友情支持了测试组一小段时间,发现他们使用selenium做页面的自动化测试,需要用到XPath,但IE下没有获取XPath的工具,只能在Firefox和chrome下获取,步骤还比较麻烦.而 ...

  9. SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

    SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ ...

随机推荐

  1. Linux 查看实时网卡流量的方法 sar nload iftop

    1.sar 计量脚本 sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读 ...

  2. 快速开发一个npm包(轮子)

    动机 很多人都想写一个自己的轮子,可是开始动手的时候你总会遇到以下问题 一个基本的 js 库应该如何编写 基本的前端项目都要哪些文件 又要怎么打包发布到 npm 上 你的 es6 语法如何才能让别人识 ...

  3. es6种for循环中let和var区别

    let和var区别: for(var i=0;i<5;i++){ setTimeout(()=>{ console.log(i);//5个5 },100) } console.log(i) ...

  4. C语言之枚举数据类型

    枚举数据类型概述:1.枚举类型是C语言的一种构造类型.它用于声明一组命名的常数,2.当一个变量有几种可能的取值时,可以将它定义为枚举类型.3.枚举类型是由用户自定义的由多个命名枚举常量构成的类型,其声 ...

  5. vue中动态设置echarts画布大小

    document.getElementById('news-shopPagechart').style.height = this.heightpx2+'px'; //heightpx2定义在data ...

  6. rest实践1

    REST 即表述性状态传递,是一种针对网络应用的设计和开发,可以降低开发的复杂性.是主流的Web服务实现方案. 表述性状态转移是一组构架约束条件和原则,满足这些约束条件和原则的应用程序和设计就是RES ...

  7. Java Linked集合的简单介绍和常用方法的使用

    LinkedList的简单介绍 java.util.LinkedList 集合数据存储的结构是链表结构.LinkedList是一个双向链表在实际开发中,对一个集合元素的添加和删除,经常涉及到首尾操作, ...

  8. linux入门系列7--管道符、重定向、环境变量

    前面文章我们学习了linux基础命令,如果将不同命令组合使用则可以成倍提高工作效率.本文将学习重定向.管道符.通配符.转义符.以及重要的环境变量相关知识,为后面的shell编程打下基础. 一.IO重定 ...

  9. CF - 一直交换元素的规律

    Dima is a beginner programmer. During his working process, he regularly has to repeat the following ...

  10. 关于将vs项目推到GitHub上遇到的问题

    想整理下项目,然后通过vs推到github下. 1.在vs上创建好了一个程序.点中解决方案-->右键-->将项目加入代码库. 2.在github上创建好一个仓库,然后复制下https 3. ...