# 23级全栈1班示例项目-webapi **Repository Path**: myhfw003/grade23-fullstack-class1-demo-webapi ## Basic Information - **Project Name**: 23级全栈1班示例项目-webapi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-06 - **Last Updated**: 2025-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 23级全栈1班示例项目-WebApi 1. C#基础 2. 面向对象C#版 3. C#高级用法 4. Webapi项目 5. 原始CRUD ```mermaid graph TD A[开始] --> B{是否满足条件} B -->|是| C[执行操作] B -->|否| D[结束] C --> D ``` ### 使用EntityFrameworkCore(ORM) 1. 数据库优先 先设计创建好数据库,再使用EFCore连接的情况,就叫数据库优先 2. 代码优先 先行使用代码定义模型或者实体类型,再使用EFCore迁移到数据库的情况,就叫代码优先 - 安装核心依赖包:Microsoft.EntityFrameworkCore - 安装数据库驱动依赖包:Pomelo.EntityFrameworkCore.MySql - 安装工具依赖包:Microsoft.EntityFrameworkCore.Design - 定义实体类型 - 定义数据库上下文 - 将数据库上下文注册到容器,以便使用 - 生成迁移文件:dotnet ef migrations add XXXX - 将迁移文件同步到数据库:dotnet ef database update ### EFCore完成后,可以做的事情 1. 封装统一的返回类型 2. 抽取公共的实体属性到基础属性中,如软删除、审计属性等 3. 定义统一的仓储接口 4. 实现统一的仓储接口(不同的实现) 5. 依赖注入仓储接口 6. 分页、查找、过滤 7. 日志(异常、错误、审计等) ## 到目前为止,我们为这个项目都干什么? 1. 建项目,命令:dotnet new webapi -n 项目名称 2. 变成控制器模式 builder.Services.AddControllers(); app.MapControllers(); 建控制器文件夹Controllers,建控制器XXXXController:ControllerBase 3. 搞定EFCore - 安装各依赖包 - dotnet add package Pomelo.EntityFrameworkCore.Mysql - dotnet add package Microsoft.EntityFrameworkCore.Design - 定义实体类型 - 定义数据库上下文 - XXXDbContext:DbContext - DbSex<实体> 表名称 {get;set;} - 构造函数 - 生成迁移文件 - dotnet tool install --global dotnet-ef // 全局安装迁移工具 - dotnet ef migrations add XXX // 前提条件:程序不能处于运行状态、程序不能有编译错误 - 将迁移文件同步到数据库 - dotnet ef database update 4. 定义仓储接口(异步,包含CRUD) ```C# public interface IRepository { Task> GetAllAsync(); Task GetByIdAsync(Guid id); Task CreateAsync(T entity); Task UpdateAsync(T entity); Task DeleteAsync(T entity); } ``` 5. 实现仓储接口 6. 注册仓储接口 ``` builder.Services.AddScore(typeof(IRepository<>),typeof(EfReposiotry<>)) ```