.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

简介: - ORM- Repository 仓储- UnitOfWork 工作单元- DB Context 与 DB Set- EF Core快速开始示例

2.4.2 EF Core -- 介绍

  • ORM
  • Repository 仓储
  • UnitOfWork 工作单元
  • DB Context 与 DB Set
  • EF Core快速开始示例

ORM

ORM:object-rational mapping

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

Repository 仓储

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

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

24.jpg

UnitOfWork 工作单元

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

DB Context 与 DB Set

DB Context(UnitOfWork 工作单元)

DB Set(Repository 仓储)

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

EF Core快速开始示例

  • 创建一个空的 web api 项目
  • 添加 Pomelo.EntityFrameworkCore.Mysql 的 nuget 包引用
  • 创建实体
  • 创建 DbContext
  • 配置连接字符串并且注入 DbContext
  • 使用 DbContext 完成数据查询与插入

创建实体

Entity

namespace LighterApi.Data
{
    public class Entity
    {
        /// <summary>
        /// 主键Id
        /// </summary>
        public string Id { get; set; }

        /// <summary>
        /// 全局唯一的身份
        /// </summary>
        public string IdentityId { get; set; }

        /// <summary>
        /// 租户Id
        /// </summary>
        public string TenantId { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public string UserId { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// 创建的用户
        /// </summary>
        public string CreatedBy { get; set; }

        /// <summary>
        /// 最后修改时间
        /// </summary>
        public DateTime LastUpdateAt { get; set; }

        /// <summary>
        /// 最后修改人
        /// </summary>
        public string LastUpdateBy { get; set; }
    }
}

Assistant

namespace LighterApi.Data.Project
{
    public class Assistant : Entity
    {
        public string MemberId { get; set; }

        public string ProjectGroupId { get; set; }
    }
}

Project

namespace LighterApi.Data.Project
{
    public class Project : Entity
    {
        public string Title { get; set; }

        public DateTime StartDate { get; set; }

        public DateTime EndDate { get; set; }

        public string SupervisorId { get; set; }

        public string PlanId { get; set; }
    }
}

Member

namespace LighterApi.Data.Project
{
    public class Member : Entity
    {
        public int Progress { get; set; }

        public string ProjectId { get; set; }
    }
}

ProjectGroup

namespace LighterApi.Data.Project
{
    public class ProjectGroup : Entity
    {
        public string Name { get; set; }

        public string ProjectId { get; set; }
    }
}

Task

namespace LighterApi.Data.Project
{
    public class Task : Entity
    {
        public string Title { get; set; }

        public string SectionId { get; set; }

        public string Description { get; set; }

        public string ProjectId { get; set; }

        public string MemberId { get; set; }

        //public EnumTaskStauts Status { get; set; }
    }
}

EnumTaskStauts

namespace LighterApi.Share
{
    public class EnumTaskStauts
    {
    }
}

创建 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);
        }
    }
}

配置连接字符串并且注入 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();
});

使用 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();

在 Postman 中添加环境变量

25.jpg

启动项目,访问新增,列表接口

26.jpg
27.jpg

GitHub源码链接:

https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi

目录
相关文章
|
2月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
60 5
|
1月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
57 26
|
4月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
116 0
|
2月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
62 1
|
3月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
64 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
2月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
57 3
|
3月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
52 3
|
3月前
|
Kubernetes Cloud Native Ubuntu
庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践
2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。
133 5
|
5月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
5月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
140 3

热门文章

最新文章