1 前言

EF6 时代,可以通过界面操作,添加数据库实体。

EF Core 需要通过 CLI 来进行该操作,具体请参考EF Core官方文档:反向工程

2 前置条件

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

参考来源

EF Core官方文档:反向工程

EFCore 的 DbFirst 模式的更多相关文章

  1. NetCore 中 EFcore的DbFirst和CodeFirst混合 使用注意

    NetCore 最近很火热.笔者想把自己以前的旧项目迁移到NetCore平台. 先用EFcore的DBFirst根据数据库创建实体类,然后加入数据库版本控制功能也就是EFcore的CodeFirst部 ...

  2. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  3. 第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)

    一. 简介 EF连接数据库有三种模式,分别是DBFirst.ModelFirst.CodeFirst,分别适用于不同的开发场景. 该章节,将主要介绍EF的DBFirst连接SQLServer数据库和M ...

  4. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  5. .NetCore教程之 EFCore连接Mysql DBFirst模式

    一:创建EF的类库,同时将此项目设置为启动项(为Scaffold-DbContext -tables指令使用),同时安装2个包   ①Microsoft.EntityFrameworkCore.Too ...

  6. Visual Studio 2015使用EF6的DBFirst模式操作Sqlite数据库

    什么是DBFirst 1:到官方下载并安装32位驱动(如果你是旧版的驱动,卸载掉,然后下载最新版的,否则操作数据时会出现异常) 2:通过Nuget获取System.Data.SQLite(会默认把下面 ...

  7. EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用

    List<GetUserUpCrmList_Result> r = null; using (var context = new HimallContext()) { var parame ...

  8. ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文

    通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...

  9. 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)

    一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...

随机推荐

  1. java面向对象思想之封装

    一.什么是封装 菜鸟教程对封装的解释是"在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法.".简单来说就 ...

  2. phpstorm chrome 添加xdebug扩展

    转:https://blog.csdn.net/ltcm_sakura/article/details/102967859 一.Xdebug helper:php调试插件 http://chromec ...

  3. Java中hashCode、equals、==的区别

    ref:http://www.cnblogs.com/skywang12345/p/3324958.html 1.==作用: java中的==用来判断两个对象的地址是否相等:当对象是基本数据类型时,可 ...

  4. Oracle入门基础(六)一一子查询

    SQL> --查询工资比SCOTT高的员工信息 SQL> --1. SCOTT的工资 SQL> select sal from emp where ename='SCOTT'; SA ...

  5. js的json序列化和反序列化

    (1)序列化 即js中的Object转化为字符串 1.使用toJSONString var last=obj.toJSONString(); //将JSON对象转化为JSON字符 2.使用string ...

  6. 机器学习之近邻算法模型(KNN)

    1..导引 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问 ...

  7. MCU选型

    含义: MCU(Micro Controller Unit)中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer),是指随着大规模集成电路的出现及其发展,将计算 ...

  8. 前端基础之CSS(1)

    1.css3的新特性有哪些 (1)CSS3选择器(基本.属性.伪类具体见下) (2)CSS3边框与圆角 圆角border-radius 属性:border-top-left-radius 左上角 bo ...

  9. CCF201812-2小明放学

    题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明"终端,可以看到光明区所有红绿灯此时此刻的状 ...

  10. wx.getImageInfo和wx.downloadFile下载用户头像报错(小程序canvas以及小程序图片下载部分)

    我先上图 之前我们后台配置的 downloadFile 合法域名是 https://wx.qlogo.cn,   用了好久都没出问题,  前段时间,  用户反馈  分享海报,  用户头像出不来!!!! ...