DbContext
DbContext是数据库和领域模型之间的桥梁。使用它可以查询数据到你的 entitys 集合中,也可以通过它将 entitys 保存到底层数据库中, EF Core 中的 DbContext 拥有的模块:连接管理、查询数据、持久化数据、修改跟踪、缓存、事务管理,具体见:https://www.cnblogs.com/OFSHK/p/14441635.html
使用步骤
-
安装EF,通过Alter+Enter即可。
-
创建 DbContext:创建一个PatientDbContext.cs,并继承EF中的基类DbContext
using Microsoft.EntityFrameworkCore;
namespace Demo_One
{
// 连接DbContext,而不是创建
//该cs文件的目的:通过DbContext去连接数据库
//该类主要用于对 DbContext 做一些必要的参数配置
public class PatientDbContext:DbContext
{
public PatientDbContext(DbContextOptions<PatientDbContext> option) : base(option) // 记住
{
}
// 新增几个DbSet<TEntity>属性用来表示实体集合 DbSet表示可用于增删改查操作的实体集
public DbSet<Patient>Patients { get; set; } // DbContext中每一个表加一个DbSet
}
}
- 注册 DbContext 注入到 ASP.NET Core 运行时:添加代码到Startup.cs的ConfigureServices方法下。
public void ConfigureServices(IServiceCollection services)
{
//注册 DbContext 注入到ASP.NET Core运行时。
// 要想在 ASP.NET Core 中使用,要将PatientDbContext注入到ServiceCollection容器中
// 这里用pgsql作为底层存储,安装途径:先去EF官方文档上找到pqsql对应的NuGet程序包再进行安装
//是Npgsql.EntityFrameworkCore.PostgreSQL,而不是Npgsql
// 记住
services.AddDbContext<PatientDbContext>(opt => opt.UseNpgsql(Configuration["ConnectionStrings:aliyun_pgsql"]));
services.AddControllers();
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "Demo_One", Version = "v1"}); });
}
- DbContext 依赖注入:现在PatientDbContext已经注入到容器了,然后我们新建一个PatientController.cs,就可以在PatientController中通过依赖注入的方式获取PatientDbContext实例实例
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Mvc;
namespace Demo_One.Controllers
{
// DbContext依赖注入
// 在Startup中,PatientDbContext已经注入到容器了
// 所以现在在PatientController中,通过依赖注入的方式去获取PatientDbContext实例
// 通过构造函数注入
// MVC或者API的应用,当你在控制器中这么写的时候,
// .NET Core会自动把你已注册的服务给注入进来,不需要你再去实例化了new
[ApiController]
// [Route("[Controller]")]
[Route("api/patient")]
public class PatientController:ControllerBase
{
private readonly PatientDbContext _patientDbContext;
public PatientController(PatientDbContext patientDbContext) // 构造函数注入
{
_patientDbContext = patientDbContext;
}
······
······