DbTool 2.0.0 Released

DbTool 2.0.0 Released

Intro

DbTool 一个支持 DbFirstModelFirstCodeFirst 的数据库小工具。

DbFirst 是根据数据库中的表信息生成代码中的 Model,以及生成数据表结构文档

ModelFirst 是根据数据表信息或者数据表结构文档生成创建数据库的脚本

CodeFirst 是指根据 model 代码生成数据库表结构信息以及创建数据表的 SQL 脚本

在新的版本中主要增加对于一些新的 C# 特性的支持

  • 全局引用

  • 文件范围命名空间

  • 可空引用类型

Features

Db First

本次更新主要针对于 C# 的新特性做了一些支持

可空引用类型是 C# 8 开始引入的特性,启用之后默认引用类型也是不可为空的,比如说 string 是不可为 null 的,如果要允许为 null 则应声明为 string?,而数据库中字段一般是会区分是否允许为 null 的,和这一特性就会比较契合,efcore 6 开始也会根据是否可以为空生成是否可为空的数据库列。

全局引用和文件范围命名空间是 C# 10 引入的新特性,不了解的小伙伴可以参考之前的介绍文章 C# 10 新特性 —— 命名空间的变化

b48b36e50ec92473b4259398b4e60ef2.png

DbFirst

以上数据表导出的代码示例:

namespace Models;public class Notice
{public Guid NoticeId { get; set; }public string NoticeTitle { get; set; }public string? NoticeDesc { get; set; }public string? NoticeContent { get; set; }public string? NoticePath { get; set; }public string? NoticeExternalLink { get; set; }public string? NoticeImagePath { get; set; }public string? NoticeCustomPath { get; set; }public int NoticeVisitCount { get; set; }public DateTime UpdateTime { get; set; }public string UpdateBy { get; set; }public DateTime NoticePublishTime { get; set; }public string NoticePublisher { get; set; }public bool CheckStatus { get; set; }public bool IsDeleted { get; set; }
}

允许为 null 的字段就会声明为可为空的引用类型如 string?

在导出方面,默认支持了导出 csv 文档

Model First

7a83daaf81599e006ca46c1734b05b81.png

ModelFirst

ModelFirst 在原来的基础上集成了 Csv 文档的导入

Code First

我们可以从一个 C# model 代码提取出其中的属性来生成数据库的表结构,生成不同数据库的创建表的脚本

9438626cfad104f9025154110bfe1ebe.png

CodeFirst

Settings

1d03aaa0f979a5e427bc5ce72eb7fa74.png

Settings

最后配置页面增加了针对新的选项的默认配置

More

更多实现细节以及自定义可以查看和修改源码,你也可以根据需要自定义自己的插件,可以参考:https://github.com/WeihanLi/DbTool.Packages/blob/main/README.md

References

  • https://github.com/WeihanLi/DbTool

  • https://github.com/WeihanLi/DbTool.Packages

  • 数据库小工具 DbTool

  • .NET 6 中的隐式命名空间引用

  • C# 10 新特性 —— 命名空间的变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯] 蚂蚁感冒

[蓝桥杯] 蚂蚁感冒 峰值内存消耗 < 256M  CPU消耗 < 1000ms 【题目描述 - Problem Description】 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左&#xff0c;有的朝右。 每只蚂蚁都只能沿着杆子向前爬&#xff0c;速度是1厘米/秒。 当两只蚂蚁碰面时&#xff0…

Source Insight之Relation Window Properties配置和一些快捷键

1 Source Insight之Relation Window Properties配置 我们先点击source Insight的这个地方 然后鼠标右键&#xff0c;点击Relation Window Properties&#xff0c;配置如下 2 快捷键 目前就我知道的 1&#xff09;按亮和按熄这个变量 shift F8 2&#xff09;跳转到具体一行…

ArcGIS 10.2 Calculate Value(Data Management) 工具的使用

1、概述 Calculate Value tool returns a value based on a specified Python expression. 计算值工具返回一个基于特定Python表达式的值。 工具位置:ToolBox→Data Management Tools→General→Calculate Value 2、注意事项 (1)该工具只能用于MoudleBuilder,而不能用于Py…

omnicppcomplete php,VIM 常用法 (三)

这里描述常用的插件。1. NERD tree快捷键&#xff1a;o 在已有窗口中打开文件&#xff0c;并跳到该窗口go 在已有窗口中打开目录或文件&#xff0c;但不跳到该窗口i/s 在split/vsplit的新窗口打开文件&#xff0c;并跳到该窗口gi/si 在split/vslpit的新窗口打开文件&#xff0c…

android:versionCode和android:versionName 用途

Android的版本可以在androidmainfest.xml中定义&#xff0c;主要有android:versionCode和android:versionNameandroid:versionCode:主要是用于版本升级所用&#xff0c;是INT类型的&#xff0c;第一个版本定义为1&#xff0c;以后递增&#xff0c;这样只要判断该值就能确定是否…

js 深复制一个对象

自定义 cloneObj 方法 //深复制对象 var cloneObj function (obj) {var newObj {};if (obj instanceof Array) {newObj [];}for (var key in obj) {var val obj[key];newObj[key] typeof val object ? cloneObj(val) : val;}return newObj; }; 转载于:https://www.cnblo…

js (javascript) 中获取年月日信息

获取年月日的所有信息&#xff1a; 直接使用date(); 如要取得 其他单独年月日时间 &#xff1a; 首先创建一个date对象&#xff0c;例如 &#xff1a; var d new Date(); 随后例如取得当前年 &#xff0c;使用&#xff1a; d.getFullYear() 当前月使用 &#xff1a; d…

vb6编写dll读取dat文件_【STM32Cube_15】使用硬件I2C读取温湿度传感器数据(SHT30)...

寻求更好的阅读体验&#xff0c;请移步Mculover666的个人博客&#xff1a;【STM32Cube_15】使用硬件I2C读取温湿度传感器数据&#xff08;SHT30&#xff09;​www.mculover666.cn本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设&#xff0c;读取SHT30温湿度…

windows之如何刷新电脑DNS缓存

1 问题 我在windows电脑里面的终端通过ping 泛域名&#xff0c;可以看到这个域名解析的地址&#xff0c;后面做了这个泛域名解析地址做了修改&#xff0c;但是我ping 这个泛域名地址的时候依然是之前的地址&#xff0c;然后我把终端关闭掉&#xff0c;再次ping这个地址&#x…

tcp/ip ---数据封装过程

转载于:https://www.cnblogs.com/saryli/p/5306721.html

NuGet 新特性 -- 中心化的 NuGet 包版本管理

NuGet 新特性 -- 中心化的 NuGet 包版本管理IntroNuGet 支持了一个可以中心化管理 NuGet 包版本的方案&#xff0c;我们可以在一个地方统一管理 NuGet 包的版本Preface在之前的版本中我们通常在每个指定包版本引用的地方会设置 NuGet 包的版本号&#xff0c;如果项目比较多&…

Java面向对象编程学习

1、新建一个工程&#xff0c;在工程下新建一个类Method01&#xff08;勾选创建main函数&#xff09; package ClassStudy;class Person {String name; //默认为nullint age; //默认为0//构造函数public Person(){namenull;age0;}//方法public void say(){System.out.println(&…

数据库oracle 别名不能更新,数据库oracle改成mysql后Hibernate不能使用别名问题

报错&#xff1a; [INFO ] 11:34:19.272 [http-apr-7081-exec-8] org.hibernate.type.StringType - could not read column value from result set: PK_ID; Column PK_ID not found. [WARN ] 11:34:19.274 [http-apr-7081-exec-8] o.h.util.JDBCExceptionReporter - SQL Error:…

sql 两表更新

UPDATE sale_origin_line set statecancel from sale_origin p,sale_origin_line q where p.idq.order_id and p.company_id3 and p.date<2017-08-01;转载于:https://www.cnblogs.com/1314520xh/p/7338592.html

查询工资最低的3名员工的职工工号、姓名和收入_普法课堂|你有多久没有收到工资条了?...

工资条对于现在的大多数劳动者而言&#xff0c;尤其是90、00后&#xff0c;可能是一个十分陌生的概念和事物&#xff0c;许多用人单位已经不再向劳动者发放&#xff0c;在司法实践中工资条越来越少的在庭审中予以呈现。工资条对于劳动者而言十分重要&#xff0c;即便未有用人单…

js(javascript)取得当前时间小时,分钟,秒 以及毫秒

首先 我们需要new一个date对象&#xff1a; var d new Date(); 随后&#xff0c;取得当前时间小时&#xff1a; d.getHours() 取得当前分钟&#xff1a; d.getMinutes()) 取得当前秒&#xff1a; d.getSeconds() 取得当前毫秒&#xff1a; d.getMilliseconds() 全部…

linux之通过tail命令动态跟踪日志文件里面的末尾信息

1 问题场景 比如在linux系统,我们服务端的错误日志在一个文件里面不断输入进去,我们需要动态查看,我们总不可能每次进行cat文件查看 2 tail命令和head命令 head命令默认是输出一个文件的最前面10行 tail命令默认是输出一个文件的最后面10行 1) -n参数 具体显示多少行 显示…

【鉴权/授权】基于角色的简单授权认证

微信公众号&#xff1a;趣编程ACE关注可了解.NET日常开发技巧。如需源码&#xff0c;请公众号留言 源码;上文回顾【鉴权/授权】一步一步实现一个简易JWT鉴权【鉴权/授权】自定义一个身份认证Handler授权小Demo前面两篇文章中&#xff0c;我利用简单的小例子实现了JWT授权、自定…

android数据持久化存储(2)

SharedPreferences 将数据存储到SharedPreferences中&#xff1a; 不同于文件的存储方式&#xff0c;SharedPreferences是使用键值对的方式来存储数据的。也就是说当保存一条数据的时候&#xff0c;需要给这条数据提供一个对应的健&#xff0c;这样再读取数据的时候就可以通过这…

不使用sizeof,获取变量所占用的字节数

方法一&#xff1a;宏定义 #include<iostream> using namespace std; #define LengthOf(Value) (char*)(&Value1)-(char*)&Value int main() {int i;double d;double *q;char a[10];printf("%d\n",LengthOf(i)); //printf("%d\n",sizeof(i))…