2.4.2 EF Core的介绍

一、ORM(Object-Rational Mapping)

  • 对 SQL 语言进行封装,降低使用难度,多种 SQL 语言的抽象
  • 多出来的对事务、连接池、迁移、种子数据等一些功能
  • 多数情况下 ORM 生成的 SQL 脚本比你自己写的要好

二、Repository 仓储

在领域层和数据映射层之间,像一个内存级别的领域对象集合

  • 为领域业务的单元测试提供替换点
  • 集中数据库访问逻辑

三、UnitOfWork 工作单元

一个工作单元在一个事务范围内保留所有对数据库的变更,在这个工作单元结束的时候一次性提交所有改动到数据库

四、DB Context 与 DB Set

DB Context(UnitOfWork 工作单元)

DB Set(Repository 仓储)

EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作的 ORM 框架

五、EF Core快速示例

5.1创建 DbContext

 LighterDbContext

namespace LighterApi.Data
{
    public class LighterDbContext : DbContext
    {
        public LighterDbContext(DbContextOptions<LighterDbContext> options) : base(options)
        {

        }

        public DbSet<Project.Project> Projects { get; set; }

        public DbSet<Project.Member> Members { get; set; }

        public DbSet<Project.Assistant> Assistants { get; set; }

        public DbSet<Project.ProjectGroup> ProjectGroups { get; set; }

        public DbSet<Project.Task> Tasks { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
}

5.2配置连接字符串并且注入 DbContext

需要将 server 地址修改为数据库服务器地址

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "LighterDbContext": "server=127.0.0.1;port=7306;user=root;password=root123456@;database=lighter"
  },
  "AllowedHosts": "*"
}

Startup

public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
services.AddDbContext<LighterDbContext>(options =>
{
    options.UseMySql(Configuration.GetConnectionString("LighterDbContext"));
});

services.AddControllers();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

5.3使用 DbContext 完成数据查询与插入 

初始化数据库 ,注意在初始化以前确保正确配置了连接字符串,并且在startup.cs中添加了DbContext的注入

// 安装dotnet tool ef工具 
dotnet tool install --global dotnet-ef

// 以下命令需要在api项目的目录下执行 
// 在项目内安装 
dotnet add package Microsoft.EntityFrameworkCore.Design

//添加迁移文件
dotnet ef migrations add Init

// 更新数据库 
dotnet ef database update

创建控制器 ProjectController

namespace LighterApi.Controller
{
    [ApiController]
    [Route("api/[controller]")]
    public class ProjectController : ControllerBase
    {
        private readonly LighterDbContext _lighterDbContext;

        public ProjectController(LighterDbContext lighterDbContext)
        {
            _lighterDbContext = lighterDbContext;
        }
    }
}

查询列表 

[HttpGet]
public async Task<IEnumerable<Project>> GetListAsync(CancellationToken cancellationToken)
{
    return await _lighterDbContext.Projects.ToListAsync(cancellationToken);
}

新增

public async Task<ActionResult<Project>> CreateAsync([FromBody] Project project,
    CancellationToken cancellationToken)
{
    project.Id = Guid.NewGuid().ToString();
    _lighterDbContext.Projects.Add(project);
    await _lighterDbContext.SaveChangesAsync(cancellationToken);
    return StatusCode((int) HttpStatusCode.Created, project);
}

修改启动端口,launchSettings.json

"applicationUrl": "https://localhost:6001;http://localhost:6000",

为了简化日期格式入参,添加 nuget 包 Microsoft.AspNetCore.Mvc.NewtonsoftJson

services.AddControllers().AddNewtonsoftJson();
原文地址:https://www.cnblogs.com/duyao/p/14889286.html