(开始实战)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容器里面的这么一个上下文的类型的实例。

相关推荐
The Future is mine4 小时前
.Net Core 在Linux系统下创建服务
linux·运维·.netcore
*长铗归来*1 天前
ASP.NET Core Web API 中控制器操作的返回类型及Swagger
后端·c#·asp.net·.netcore
IDOlaoluo1 天前
VS2017 安装 .NET Core 2.2 SDK 教程(包括 dotnet-sdk-2.2.108-win-x64.exe 安装步骤)
.netcore
csdn_aspnet9 天前
使用 Entity Framework Code First 方法创建 ASP.NET Core 5.0 Web API
.netcore·webapi
小先生8129 天前
.NET Core项目中 Serilog日志文件配置
c#·.netcore
爱吃香蕉的阿豪9 天前
.NET Core 中 System.Text.Json 与 Newtonsoft.Json 深度对比:用法、性能与场景选型
数据库·json·.netcore
csdn_aspnet9 天前
ASP.NET Core 10.0 的主要变化
.netcore
csdn_aspnet12 天前
在 C# .NETCore 中使用 MongoDB(第 1 部分):驱动程序基础知识和插入文档
mongodb·.netcore
csdn_aspnet12 天前
在 C# .NETCore 中使用 MongoDB(第 3 部分):跳过、排序、限制和投影
mongodb·c#·.netcore
csdn_aspnet13 天前
在 C# .NETCore 中使用 MongoDB(第 2 部分):使用过滤子句检索文档
mongodb·c#·.netcore