Intern Day10

DbContext

DbContext是数据库和领域模型之间的桥梁。使用它可以查询数据到你的 entitys 集合中,也可以通过它将 entitys 保存到底层数据库中, EF Core 中的 DbContext 拥有的模块:连接管理、查询数据、持久化数据、修改跟踪、缓存、事务管理,具体见:https://www.cnblogs.com/OFSHK/p/14441635.html

使用步骤

  1. 安装EF,通过Alter+Enter即可。

  2. 创建 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
    }
}
  1. 注册 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"}); });
        }
  1. 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;
        }
    ······
    ······
原文地址:https://www.cnblogs.com/OFSHK/p/14456945.html