首页 程序笔记 Entity Framework Core反向工程DB First基于数据库生成DbContext和实体类

Entity Framework Core反向工程DB First基于数据库生成DbContext和实体类

反向工程是基于数据库架构搭建实体类型类和 DbContext 类基架的过程。微软官方提供了两种方式:

 .NET 命令行接口 (CLI) 工具的 dotnet ef dbcontext scaffold 命令执行

使用 EF Core 包管理器控制台 (PMC) 工具的 Scaffold-DbContext 命令

如果使用的Visual Studio,那么可以选择PMC工具,否则只能用CLI工具。因为使用PMC容易出错,所以建议使用CLI工具的dotnet ef dbcontext scaffold 命令。

使用.NET 命令行接口 (CLI) 工具(推荐)

先在PowerShell里运行命令dotnet tool install --global dotnet-ef 全局安装dotnet ef工具。

微软文档说要通过Nuget安装Microsoft.EntityFrameworkCore.Design包,作者实测不需要安装也可以。

安装完dotnet ef工具后在需要生成实体类的目录里执行命令:

dotnet ef dbcontext scaffold "Server={数据库地址};Database={数据库名称};User={登录名};Password={密码};Encrypt=True;TrustServerCertificate=True;" Microsoft.EntityFrameworkCore.SqlServer

这样就会为你自动创建了。

这里要注意链接字符串里需要加上Encrypt=True;TrustServerCertificate=True;,否则可能会报错:

Microsoft.EntityFrameworkCore.SqlServerMicrosoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 -

证书链是由不受信任的颁发机构颁发的。)

使用EF Core 包管理器控制台 (PMC) 工具

需要通过Nuget包管理器安装下面的包:

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

Microsoft.EntityFrameworkCore.Design

然后打开PowerShell,执行命令:

Scaffold-DbContext 'Server={数据库地址};Database={数据库名称};User={登录名};Password={密码};' Microsoft.EntityFrameworkCore.SqlServer

如果有证书问题像上面一样加上Encrypt=True;TrustServerCertificate=True;。

这样就给你自动生成好了。

这里很多人会碰到报错:

Scaffold-DbContext : 无法将“Scaffold-DbContext”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1

如果报这个错建议还是使用第一种方法比较简单,而且不需要装什么包就可以了。

指定特定的表反向生成

.NET CLI命令

dotnet ef dbcontext scaffold ... --table Artist --table Album

(PMC) 工具命令

Scaffold-DbContext ... -Tables Artist, Album

对象和属性名称命名规则

默认情况下,表和列名已修正,以便更好地匹配类型和属性的 .NET 命名约定。 在 PMC 中指定 -UseDatabaseNames 开关或在 .NET Core CLI 中指定 --use-database-names 选项将禁用此行为,从而尽可能保留原始数据库名称。 无效的 .NET 标识符仍将被修正,而合成名称(如导航属性)仍将符合 .NET 命名约定。

使用Fluent API或数据注释

默认情况下,使用 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; }

指定DbContext类的名称

默认情况下,DbContext 类名称将是后缀为 Context 的数据库名称。 若要指定不同名称,请在 PMC 中使用 -Context,在 .NET Core CLI 中使用 --context指定。

目录和命名空间

实体类和 DbContext 类将生成到运行命令行所在的目录中,并使用项目的默认命名空间。比如例子中我在Models文件夹下运行的命令,那么它会生成在Models文件夹下并使用BlazorBlog.Models作为命名空间。

当然可以自己定义目录和命名空间

.NET CLI命令

可使用 --output-dir 指定在其中为类搭建基架的目录,并且可使用 --context-dir 将 DbContext 类搭建到与实体类型类不同的目录中:

dotnet ef dbcontext scaffold ... --context-dir Data --output-dir Models

默认情况下,命名空间将是根命名空间加上项目根目录下任何子目录的名称。 但是,可使用 --namespace 覆盖所有输出类的命名空间。 还可使用 --context-namespace 仅覆盖 DbContext 类的命名空间:

dotnet ef dbcontext scaffold ... --namespace Your.Namespace --context-namespace Your.DbContext.Namespace

(PMC) 工具命令

可使用 -OutputDir 指定在其中为类搭建基架的目录,并且可使用 -ContextDir 将 DbContext 类搭建到与实体类型类不同的目录中:

Scaffold-DbContext ... -ContextDir Data -OutputDir Models

默认情况下,命名空间将是根命名空间加上项目根目录下任何子目录的名称。 但是,可使用 -Namespace 覆盖所有输出类的命名空间。 还可使用 -ContextNamespace 仅覆盖 DbContext 类的命名空间。

Scaffold-DbContext ... -Namespace Your.Namespace -ContextNamespace Your.DbContext.Namespace

更新实体模型

对数据库进行更改后,可能需要更新 EF Core 模型以反映这些更改。 如果数据库更改很简单,只需手动对 EF Core 模型进行更改即可。 例如,重命名表或列、删除列或更新列的类型都是在代码中进行的微小更改。

但是,更重要的更改并不容易手动完成。 一种常见的工作流是使用 -Force (PMC) 或 --force (CLI) 再次从数据库对模型进行反向工程,以使用更新的模型覆盖现有模型。

3

站心网

反向工程是基于数据库架构搭建实体类型类和 DbContext 类基架的过程。微软官方提供了两种方式: .NET 命令..

为您推荐

PGlite:轻量级嵌入式PostgreSQL数据库使用方法

PGlite是一款基于PostgreSQL的轻量级嵌入式数据库,专为前端应用、无服务器环境和本地开发优化。与传统的PostgreSQL服务器相比,PGlite无需单独安装数据库服务,而是可以直接在应用程序内部运行,提供了一种更加灵活..

服务器安装数据库MySQL8.0版本,打包导入到MySQL5.6失败的结局方式

最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..

在数据库中cms_content表content字段用SQL过滤替换掉包含photo.abc.tw所有图片img标签

SQL 语句:UPDATEcms_contentSETcontent=REGEXP_REPLACE(content,'<img[^>]*src="photo\\.abc\\.tw[^"]*"[^>]*>','')WHEREcontentREGEXP'<img[^>]*src="//photo\\.abc\\.tw';解释:REGEXP_R..

Entity Framework(EF)DbContext SaveChanges()生命周期

在Entity Framework(EF)中,SaveChanges()方法的作用是保存DbContext上下文中所有被跟踪的更改。这意味着,在一个DbContext实例的生命周期内,无论对象在何处被修改,只要它们被DbContext跟踪,SaveChanges()都会..

.NET Core 使用ML.NET 机器学习分析预测股票走势

在 .NET Core 中,你可以利用 ML.NET 框架来构建机器学习模型,以预测股票价格走势。以下是一个基本的实现步骤:​1. 准备数据:​收集并整理股票的历史数据,包括日期、开盘价、最高价、最低价、收盘价和成交量等信..

ASP.Net Core WebApi几种版本控制对比

一、版本控制的好处:(1)有助于及时推出功能, 而不会破坏现有系统。(2)它还可以帮助为选定的客户提供额外的功能。API 版本控制可以采用不同的方式进行控制,方法如下:(1)在URL 中追加版本或作为查询字符串参..

.NET CORE 设置cookie以及获取cookie

使用我这个方式的前提是在mvc中,确认你安装了:Microsoft.AspNetCore.Mvc.然后在继承了Controller的类型中使用我所说的方法。直接使用即可,我是封装了方法供我自己使用,代码如下: public abstract class Control..

实时数据的处理一致性如何保证?

实时数据一致性的定义以及面临的挑战数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中,一致性包括但不限于数据的准确性、完整性、时效性和顺序性。下图是典型的实时/..

关于大数据的一些真知灼见

大数据很强大,但还是有很多人仍然不知道它到底是什么。让我们来学习大数据的真实表现,以及如何更好地促进企业转型。或许我们经常听到有人讲大数据,但仍然有很多人不知道它到底是什么。因为我确信它很强大,所以我..

数据库SQL优化大总结之 百万级数据库优化方案

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from..

.net环境下跨进程、高频率读写数据

一、需求背景1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑,难点在于这个规模的热点数据,变化非常频繁。数据来源..

工作中人们常提到的数据预处理,说的到底是什么?

数据预处理一方面是为了提高数据的质量,另一方面也是为了适应所做数据分析的软件或者方法。在做数据分析时,我想许多数据分析师会像《R语言实战第二版》的作者卡巴科弗那样发出感叹:“数据分析师在数据预处理上花..

VS创建.NET Core项目使用Docker方式部署到Linux服务器

在 Visual Studio(VS) 中,使用 Docker 方式部署 .NET Core 项目 到 Linux 服务器,可以简化环境管理并提高部署效率。以下是完整教程:1. 在 VS 创建 .NET Core 项目并启用 Docker新建 ASP.NET Core 项目打开 Visu..

.NET Core网站减少内存占用的方法

在.NET Core网站开发中,有效管理内存占用对于保证应用程序的性能和稳定性至关重要。以下是一些减少内存占用的关键策略,它们着重于代码优化、内存管理以及相关因素的综合考虑。代码层面的优化首先,编写高效的代码..

2025年常见SQLServer数据库面试题

分享一些 2025年常见的 SQL Server 数据库面试题,涵盖基础知识、性能优化、高级查询、管理与运维等多个方面,适用于开发、DBA 及数据分析相关岗位的面试。1. SQL Server 的基本架构是什么?答案:SQL Server 的架构..

一个简单的大转盘抽奖程序(附.NetCore Demo源码)

最近闲下来在做一些demo,现在讲一下做的一个简单的大转盘抽奖demo,前端lottery,layui,后端.net core,sqlsugar,数据库用的mysql1.前端实现:前端用的是基于开源的lottery,其中有些改动的,使得前端可以自适应pc端..

EntityFramework(EF) 控制并发和事务防止超卖

在使用 Entity Framework (EF) 时,实现加减库存并避免超卖的关键是正确地控制并发和事务。以下是实现方法:解决超卖的关键点事务管理:使用事务确保加减库存和库存校验是一个原子操作。悲观锁:通过数据库层面的锁..

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址:https://liningit.github.io/LnskyDB/开源地址:https://github.com/liningit/Ln..

BotSharp 基于 .NET 平台的开源 AI 聊天机器人框架

BotSharp 是一个开源的、基于 .NET 平台的 AI 聊天机器人框架,旨在简化构建智能对话系统的过程。它主要通过自然语言处理(NLP)技术,帮助开发者构建具备语言理解和对话能力的应用。BotSharp 提供了丰富的功能和扩..

ABP.Net Core使用教程(一)启动模版项目

只需要简单的3步:1,到官网下载模版项目 https://aspnetboilerplate.com/Templates2,用VS2017打开,将Web.Host设置为启动项3,在程序包管理器控制台(Nuget控制台)里设定默认项目为EntityFrameworkCore,执行命令..

发表回复

返回顶部