EFCore 的 DbFirst 模式
1 前言
EF6 时代,可以通过界面操作,添加数据库实体。
EF Core 需要通过 CLI 来进行该操作,具体请参考EF Core官方文档:反向工程。
2 前置条件
核心 NuGet 包:Microsoft.EntityFrameworkCore.Design
还需要为要进行反向工程的数据库架构安装适当的数据库提供程序
3 主命令
dotnet ef dbcontext scaffold "[数据库连接串]" [提供程序]
如:
dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer
4 命令参数
4.1 生成指定表(--table)
上述命令,会生成整个数据库的表,如果需要指定特定的表,需要使用如下:
dotnet ef dbcontext scaffold "[数据库连接串]" [提供程序] --table table_name1 --table table_name2
4.2 保留数据库名称(--use-database-names)
默认情况会修正表/列名,使用该参数尽量保留原名称。
-UseDatabaseNames #PMC
--use-database-names #.NET Core CLI
4.3 Fluent API 和数据注释(--data-annotations)
默认情况下,使用 Fluent API 配置实体类型。使用下面的命令,可以改为使用数据注释。
-DataAnnotations #PMC
--data-annotations #.NET Core CLI
Fluent API
entity.Property(e => e.Title)
.IsRequired()
.HasMaxLength(160);
数据注释
[Required]
[StringLength(160)]
public string Title { get; set; }
4.4 指定 DbContext 名称(--context)
指定将生成的 DbContext 类的名称
-Context #PMC
--context #.NET Core CLI
4.5 指定保存目录(--context-dir 和 --output-dir)
-ContextDir Data -OutputDir Models #PMC
--context-dir Data --output-dir Models #.NET Core CLI
4.6 指定命名空间(--namespace 和 --context-namespace)
-Namespace Your.Namespace -ContextNamespace Your.DbContext.Namespace #PMC
--namespace Your.Namespace --context-namespace Your.DbContext.Namespace #.NET Core CLI
5 测试
5.1 新建一个控制台程序
这里命名为:DbFirstTest
5.2 引入 Nuget 包
# 引入 EF Core 核心包
dotnet add package Microsoft.EntityFrameworkCore.Design -v 6.0.4
# 引入 SQL Server 提供程序
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.4
5.3 执行 Scaffold 命令
在执行 Scaffold 命令前,如果使用 vs 打开 shell 一般是在解决方案的目录下,需要先 cd 进入项目目录:
# 如下,我的解决方案目录为:PS D:\_code\testnetcore\EFCoreTestApi>
PS D:\_code\testnetcore\EFCoreTestApi> cd DbFirstTest
PS D:\_code\testnetcore\EFCoreTestApi\DbFirstTest>
在控制台程序的根目录下,执行命令:
dotnet ef dbcontext scaffold "server=localhost;database=efcore;uid=sa;pwd=Qwe123456;" Microsoft.EntityFrameworkCore.SqlServer --data-annotations --context EfCoreContext --context-dir Data --output-dir Models
--data-annotations:数据注释在实体上
--context EfCoreContext:上下文指定命名为 EfCoreContext
--context-dir Data:上下文保存在根目录的 Data 文件夹下
--output-dir Models:实体保存在根目录的 Models 文件夹下
5.4 测试源码
在 Program.cs 添加测试代码:
EfCoreContext db = new EfCoreContext();
Test test = new Test()
{
Id = Guid.NewGuid(),
Name = "Add"
};
db.Tests.Add(test);
db.SaveChanges();
在项目根目录下,执行:
dotnet build #编译
dotnet run #运行
执行以后,可以看到,数据库中添加了相应的记录。
5.5 源码
Gitee:https://gitee.com/lisheng741/testnetcore/tree/master/EFCoreTestApi/DbFirstTest
Github:https://github.com/lisheng741/testnetcore/tree/master/EFCoreTestApi/DbFirstTest
参考来源
EFCore 的 DbFirst 模式的更多相关文章
- NetCore 中 EFcore的DbFirst和CodeFirst混合 使用注意
NetCore 最近很火热.笔者想把自己以前的旧项目迁移到NetCore平台. 先用EFcore的DBFirst根据数据库创建实体类,然后加入数据库版本控制功能也就是EFcore的CodeFirst部 ...
- 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand 和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...
- 第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)
一. 简介 EF连接数据库有三种模式,分别是DBFirst.ModelFirst.CodeFirst,分别适用于不同的开发场景. 该章节,将主要介绍EF的DBFirst连接SQLServer数据库和M ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- .NetCore教程之 EFCore连接Mysql DBFirst模式
一:创建EF的类库,同时将此项目设置为启动项(为Scaffold-DbContext -tables指令使用),同时安装2个包 ①Microsoft.EntityFrameworkCore.Too ...
- Visual Studio 2015使用EF6的DBFirst模式操作Sqlite数据库
什么是DBFirst 1:到官方下载并安装32位驱动(如果你是旧版的驱动,卸载掉,然后下载最新版的,否则操作数据时会出现异常) 2:通过Nuget获取System.Data.SQLite(会默认把下面 ...
- EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用
List<GetUserUpCrmList_Result> r = null; using (var context = new HimallContext()) { var parame ...
- ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文
通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...
- 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)
一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...
随机推荐
- 压测工具 jmeter入门教程及汉化修改
Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工 ...
- STM32注意事项
1. STM32 USB可配置在全速模式,时钟频率需为48MHz,且精度较高,无法使用芯片内部高速时钟实现(内部时钟精度一般为1%,但USB时钟需要0.1%) 2. 使用重映射功能时,需注意开启AFI ...
- golang实现WebSocket的商业化使用的开发逻辑(1)
WebSocket是什么 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议.其最大特点之一就是:服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对 ...
- jdr挖的大坑
计数问题小结 很多计数问题在直接拆分计算贡献时都会出现不容易直接表示的情况.在解决这些问题时,往往需要解决一些子问题方案数的递推, 再套用组合数或者分块计算来降低难度或时间复杂度,这里给出几种递推方法 ...
- 创建自定义ClassLoader,绕过双亲委派
1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载器啦. 2.类加载器类型 B ...
- lucence 内部结构是什么?
面试官:想了解你的知识面的广度和深度. 解答: Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点.可以 基于这个脉络展开一些. 最近面试一些公司,被问到的关于 Elastics ...
- String s = new String("xyz");创建了几个String Object?二者之间有什么区别?
两个或一个,"xyz"对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍,都是缓冲区中的那一个.New String每写一遍,就创建一个新 ...
- We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
今天遇到一个问题为 vue请求得到的响应为 We're sorry but demo3 doesn't work properly without JavaScript enabled. Please ...
- selenium 模块使用
selenium 概念:基于浏览器自动化的一个模块,可以模拟浏览器行为 环境的安装:下载selenium模块 selenium和爬虫之间的关联是什么? 便捷的获取页面中动态加载的数据 requests ...
- Linux下的cman中文帮助手册配置
Linux下的帮助命令man功能很强大,很好用,但显示的结果是英文,有时候看着还是吃力,就想着要是有man的中文显示结果该多好.网上搜寻一番后,终于找到解决方案,很简单,亲测有效.具体步骤如下: su ...