(开始实战)WebApi第8讲:创建实战项目、连接数据库、查询数据库里的数据(using实例化上下文、依赖注入)

一、做一个什么样的项目?------招聘网站

二、创建项目

1、新建项目模板

在 ASP.NET Core 6 如何添加 Startup.cs - 董川民

2、获取NuGet包

(1)下载EntityFrameworkCore.SqlServer:对接SqlServer数据库。

(2)下载EntityFrameworkCore.Tool:工具包,使用Database First或 Code First时要进行数据映射,做这些工作时需要用这个Tool工具包。

否则无法从slserver的数据库里面把数据映射到实体中来,实体也无法映射到数据库中去。

三、连接数据库

1、在sqlserver里创建数据库

(1)设置登录用户名为sa,密码为123456。

(2)创建名为"JobRecruitment"的数据库

2、VS里连接数据库

(1)打开程序包管理器控制台

(2)Scaffold【关键字,释义断头刀】:使用这个命令可以把数据库映射到我们的这个项目中来

输入命令如下:

Scaffold-DbContext "Data Source=127.0.0.1;database=JobRecruitment ;uid=sa;pwd=123456**;TrustServerCertificate=true** " Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities

1>Scaffold-DbContextEF Core中提供的一个命令,可以从数据库表生成模型类

2>TrustServerCertificate=true: 在执行 Scaffold-DbContext 时直接在连接字符串中指定 TrustServerCertificate=true; 来绕过证书验证。这会强制客户端信任服务器提供的任何证书。

3>-OutputDir Entities:把实体输出到一个叫做Entities的文件夹中去

四、如何查询数据库里的数据?------上下文的使用和释放

1、什么是上下文?------数据库的上下文(称为DbContext),能将数据库中的数据表示为应用程序中的对象

是一个抽象类,需要定义一个从DbContext派生的类来表示数据库上下文,如四、3、(2)和(3)。

2、创建空的API控制器

3、using:using是指对这个上下文进行一个实例化。使用 using 语句可以在using{}大括号里的语句执行完后自动释放本实例跟数据库的连接,避免资源泄露。

(1)使用方法:通过JobRecruitmentcontext(表格)这个类实例化它的对象,然后就可以使用。

(2)举例:使用using读取JobRecruitmentcontext表格里的数据。

(3)例子能使用using的核心原因

1>JobRecruitmentcontext类继承了DbContext类,DbContext类继承了一个接口IDisposable
2>IDisposable 接口定义了一个方法 Dispose,它提供了一种机制来释放非托管资源。

(4)如果不使用using,则需要通过context.Dispose()方法去释放本实例跟数据库的一个的连接。

4、using的坏处:非常消耗电脑开销。

因为每一个调用的时候都需要使用using实例化一个它的上下文跟数据库产生一个连接,用完之后再释放。

5、EF6的静态化处理【麻烦】:线程单例,实例就只有它一个,每次使用的时候调用它就可以了。

如下图伪代码,dbContext是键,"dbContext"是值。

6、EFCore的静态化处理【推荐】

(1)在.net 5框架中,有startup.cs文件

参数IServiceCollection是一个依赖注入的容器,即IOC容器。

通过service.AddSinggleton()将context上下文注入到IOC容器中。

(2)在.net 6/7/8框架中,没有startup.cs文件,服务配置和请求管道的设置都迁移到了 Program.cs 文件中。

使用 builder.Services 来配置服务,两种写法如下图。

上面红框中的DefaultConnection 是连接字符串的名称,它应该在appsettings.json 文件或环境变量中配置。

(3)通过依赖注入在控制器或其他服务中使用 DbContext

1>依赖注入的工作原理

当ASP.NET Core框架创建一个TestController实例时,它会查看构造函数的参数,并尝试从依赖注入容器中解析这些参数。因为我们在ConfigureServices中(下图中绿色框内)已经注册了JobRecruitmentContext,所以框架能够自动解析并注入这个实例。

2>以四、4、(1)为例分析过程:

构造函数: TestController()构造函数,指图面红框的TestController()。

1)参数IServiceCollection是一个依赖注入的容器,即IOC容器。

通过service.AddSinggleton()将JobRecruitmentContext已经实例化好的注入到IOC容器中。

2)系统在创建TestController控制器的时候,会查找它这个控制器里面的构造函数,看看有没有相应的参数,是容器里面已经有的存放好的这么一个实例。

3)有的话则直接把容器里的这个实例传到这个构造函数的参数里面来,这个时候就拿到了一个已经实名化好的JobRecruitmentContext实例。

4)拿到JobRecruitmentContext实例后,再把这个实例传到准备好的这个成员变量 _context里面去。

5)如此,就可以直接去使用_contex实例。

_context就是在startup.cs里面已经实例化好并且已经存到IOC容器里面的这么一个上下文的类型的实例。

相关推荐
刘梦凡呀2 天前
C# .NET Core 批量下载文件
windows·c#·.netcore
Zhen (Evan) Wang2 天前
.NET 6 WPF 利用CefSharp.Wpf.NETCore显示PDF文件
.net·wpf·.netcore
时光追逐者3 天前
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
c#·.net·.netcore
追雨潮3 天前
.net core 项目快速接入Coze智能体-开箱即用-第2节
.netcore
追雨潮4 天前
.net core 项目快速接入Coze智能体-开箱即用-全局说明
.netcore·ai编程
时光追逐者4 天前
C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
c#·.net·.netcore
全栈小54 天前
【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415
c#·mvc·.netcore
猫霸5 天前
理解.NET Core中的配置Configuration
html·.netcore·xhtml
MoFe15 天前
【.net core】【watercloud】数据库连接报错问题
数据库·.netcore
csdn_aspnet5 天前
Windows .NET Core 应用程序部署到 IIS 解决首次访问加载慢的问题
iis·.netcore