.NetCore项目使用EF Core操作SQL Server

Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具,为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进,开发人员现在可以使用更丰富的功能和增强功能,从而进一步增强了 EF Core 的功能。

EF有三种开发模式:CodeFirstModelFirstDbFirst,这三种根据业务需求及个人偏好用的相对比较多的是DbFirst和CodeFirst;现在EF Core推荐使用CodeFirst的方式进行项目开发,当然也可以通过反向工程的方式,以数据库设计为先。

以VS2022 和 .Net8.0 做一个 .netcore webapi为例,EF采用 DbFisrt开发模式

第1步: 使用NuGet包管理器安装以下三个依赖项:

Microsoft.EntityFrameworkCore.Tools

EntityFrameworkCore.sqlserver

Microsoft.EntityFrameworkCore.Design

备注:本项目使用的是VS2022, .Net8.0,所以下载EF Core时选择8.0.0版本

第2步:在 appsettings.json 中加入数据库连接字符串

复制代码
"ConnectionStrings": {
  "DBConnection": "Server=192.168.XXX.XXX;Database=XXXXX;User Id=XXX;Password=XXXXXX;TrustServerCertificate=True"
}

第3步:在 .csproj 项目文件中加入控制全球化的配置

第4步:整理命令语名,为生成实例类作准备

完整命令如下:

Scaffold-DbContext -Connection "Server=192.168.XX.XX;Database=XXX;User Id=XXX;Password=XXXXXX;TrustServerCertificate=True" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ContextDir Context -Context DBST -UseDatabaseNames -NoOnConfiguring

参数详解:

| 参数 | 作用 | 补充说明 |

Scaffold-DbContext EF Core 的反向工程 采用DbFirst 模式
-Connection 数据库连接字符串 包含服务器地址、数据库名、登录账号、密码,TrustServerCertificate=True 用于跳过 SSL 证书验证(开发环境常用,生产环境需谨慎)
-Provider 指定 EF Core 数据库提供程序 这里用 Microsoft.EntityFrameworkCore.SqlServer,对应 SQL Server。如果是 MySQL 则用 Pomelo.EntityFrameworkCore.MySql
-OutputDir 指定生成的实体类文件的输出目录(相对于项目根目录) 会在项目中创建 / 使用 Models 文件夹,存放生成的数据库表对应的实体类
-ContextDir 指定生成的 **DbContext 类文件 ** 的输出目录(相对于项目根目录) 会在项目中创建 / 使用 Context 文件夹,专门放数据库上下文类(DBST.cs
-Context 指定生成的 DbContext 类的名称 生成的上下文类名是 DBST(替代默认的命名,可根据需要变更)
UseDatabaseNames 强制生成的实体类、属性名称与数据库表、列名完全一致 默认 EF Core 会将数据库名(如 t_student_info)转成 Pascal 命名(TStudentInfo),加此参数后保持原名(t_student_info 对应类名 t_student_info
-NoOnConfiguring 不生成 DbContext 中的 OnConfiguring 方法 通常我们会通过依赖注入(DI)配置数据库连接,而非硬编码在 OnConfiguring,加此参数后,生成的 DbContext 不会包含自己写死连接字符串的逻辑,更符合 "配置与代码分离" 的最佳实践
[参数详解]

第5步:执行命令,生成实体类和上下文类

点击 工具 --> NuGet包管理器 --->程序包管理控制台 ,把第4步整理好的命令得到到控制台:

生成成功后,项目的架构中会多出Context 和 Mideks文件夹及相应的类:

需要指出的是,如果再次执行的时候,需要在后面加一个 -Force , 意思是EF Core 为了避免意外覆盖你的现有文件而默认采取不覆盖的策略,需要添加 -Force 参数来实现强制覆盖。

第6步:在Program.cs文件中,将 DBST 类注册为服务。(使其可通过依赖注入在控制器、服务中使用)

说明:

options.UseSqlServer(...) 作用: 数据库提供商,指定使用 SQL Server 数据库。

若用其他数据库(如 MySQL),需替换为对应方法:

options.UseMySql(...) // MySQL

options.UseNpgsql(...) // PostgreSQL

相关推荐
码界奇点9 小时前
基于.NET Core的CMS内容管理系统设计与实现
c++·毕业设计·.netcore·源代码管理
猹叉叉(学习版)10 小时前
【ASP.NET CORE】 13. DDD初步实现
笔记·后端·架构·c#·asp.net·.netcore
武藤一雄10 小时前
WPF Command 设计思想与实现剖析
windows·微软·c#·.net·wpf·.netcore
武藤一雄10 小时前
WPF 资源解析:StaticResource & DynamicResource 实战指南
微软·c#·.net·wpf·.netcore
武藤一雄10 小时前
WPF UI 开发深度指南:资源 (Resources)、样式 (Style) 与触发器 (Trigger) 全解析
ui·c#·.net·wpf·.netcore·avalonia
吹牛不交税12 小时前
vue3项目部署到阿里云Alibaba Cloud Linux3系统的docker
docker·容器·.netcore
猹叉叉(学习版)1 天前
【ASP.NET CORE】 12. DDD基本概念
笔记·后端·架构·c#·asp.net·.netcore
江沉晚呤时1 天前
C# 接口默认实现与依赖注入实战指南:.NET 9 企业级开发高级技巧
c#·log4j·.net·.netcore
宝桥南山2 天前
Microsoft Fabric - 试一下在Blazor应用中使用 GraphQL API去连接Lakehouse
microsoft·c#·asp.net·.netcore·fabric·db