From 35e44ea15112f7dbff45f3f9b5414e83e7128fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E9=92=B0?= <2457570067@qq.com> Date: Sun, 7 Jun 2026 22:19:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26\347\250\213\345\205\245\351\227\250.md" | 23 ++++++++++++ ...\270\252WebApi\351\241\271\347\233\256.md" | 35 +++++++++++++++++++ .../20260604-EFCore\344\270\216SQLite.md" | 27 ++++++++++++++ ...ul\347\232\204\350\247\204\350\214\203.md" | 18 ++++++++++ 4 files changed, 103 insertions(+) create mode 100644 "\351\273\204\351\222\260/20260601-\347\216\257\345\242\203\346\220\255\345\273\272\345\222\214AI\347\274\226\347\250\213\345\205\245\351\227\250.md" create mode 100644 "\351\273\204\351\222\260/20260603-\347\254\254\344\270\200\344\270\252WebApi\351\241\271\347\233\256.md" create mode 100644 "\351\273\204\351\222\260/20260604-EFCore\344\270\216SQLite.md" create mode 100644 "\351\273\204\351\222\260/20260605-CRUD\346\224\271\351\200\240\345\222\214RESTful\347\232\204\350\247\204\350\214\203.md" diff --git "a/\351\273\204\351\222\260/20260601-\347\216\257\345\242\203\346\220\255\345\273\272\345\222\214AI\347\274\226\347\250\213\345\205\245\351\227\250.md" "b/\351\273\204\351\222\260/20260601-\347\216\257\345\242\203\346\220\255\345\273\272\345\222\214AI\347\274\226\347\250\213\345\205\245\351\227\250.md" new file mode 100644 index 0000000..207849c --- /dev/null +++ "b/\351\273\204\351\222\260/20260601-\347\216\257\345\242\203\346\220\255\345\273\272\345\222\214AI\347\274\226\347\250\213\345\205\245\351\227\250.md" @@ -0,0 +1,23 @@ +# 笔记 +- 下载地址:`https://dotnet.microsoft.com/download/dotnet/8.0` +- 验证命令: +``` +dotnet --version +dotnet --list-sdks +``` +- 核心扩展 + - C# Dev Kit(微软官方):提供 C# 语法提示、编译、调试,.NET 开发必备 + - Claude 扩展:AI 对话助手,用于答疑、理解代码。 +- 环境变量(关键): + - ANTHROPIC_BASE_URL:`https://api.minimaxi.com/v1` + - ANTHROPIC_API_KEY:你的密钥 +- Claude Code CLI(命令行 AI 工具) + - 前置:安装 Node.js,验证:`node --version、npm --version` + - 安装命令:`npm install -g @anthropic-ai/claude-code` +- 基础命令 +``` +mkdir 文件夹 && cd 文件夹 +dotnet new console -n 项目名 +cd 项目名 +dotnet run +``` \ No newline at end of file diff --git "a/\351\273\204\351\222\260/20260603-\347\254\254\344\270\200\344\270\252WebApi\351\241\271\347\233\256.md" "b/\351\273\204\351\222\260/20260603-\347\254\254\344\270\200\344\270\252WebApi\351\241\271\347\233\256.md" new file mode 100644 index 0000000..1220fe0 --- /dev/null +++ "b/\351\273\204\351\222\260/20260603-\347\254\254\344\270\200\344\270\252WebApi\351\241\271\347\233\256.md" @@ -0,0 +1,35 @@ +# 笔记 +- 项目创建命令 +``` +# 创建文件夹并进入 +mkdir MyShopApi && cd MyShopApi +# 创建 Controller 风格 WebAPI 项目 +dotnet new webapi -n MyShopApi --use-controllers +# 进入项目 +cd MyShopApi +``` +- webapi:项目模板 +- -n:指定项目名 +- `--use-controllers`:使用控制器模式(非 Minimal API) + +- 启动:`dotnet run` +- 访问地址: + - Swagger UI:`https://localhost:5001/swagger` + - API 地址:`https://localhost:5001/api/xxx` +- 模型定义 +``` +public class Category +{ + public int Id { get; set; } // 主键(EF自动识别) + public string Name { get; set; } = null!; // 非空 + public string? Description { get; set; } // 可空 +} +``` +- 如果修改了函数的签名,需要重新跑,函数的签名三要素分别为函数名称,返回值,参数,这三个完全一致,可判定为一个函数 +1. 控制器注解 + - [ApiController]:自动模型验证、400 处理、标准化响应 + - [Route("api/[controller]")]:路由 = /api/categories + - 继承 ControllerBase:API 专用,无视图功能 +2. 内存数据 + - static List:全局共享,重启清空 + diff --git "a/\351\273\204\351\222\260/20260604-EFCore\344\270\216SQLite.md" "b/\351\273\204\351\222\260/20260604-EFCore\344\270\216SQLite.md" new file mode 100644 index 0000000..1e8fd42 --- /dev/null +++ "b/\351\273\204\351\222\260/20260604-EFCore\344\270\216SQLite.md" @@ -0,0 +1,27 @@ +# 笔记 +## 项目需要两类安装:项目 NuGet 包 + 全局 dotnet-ef 工具 +- 数据库驱动: `dotnet add package Microsoft.EntityFrameworkCore.Sqlite` +- 数据库迁移依赖包:`dotnet add package Microsoft.EntityFrameworkCore.Design` +- 安装dotnet-ef 工具:`dotnet tool install --global dotnet-ef` +## 定义实体类型和数据库上下文 +- 定义实体类型 +- 定义数据库上下文 +## 配置文件定义数据库文件的位置 +- 修改`appsettings.json:ConnectionStrings:{"sqlite":"data source=./db.db"}` +## Program 注册服务: +``` +builder.Services.AddDbContext(opt=>opt.UseSqlite( + builder.Configuration.GetConnectionString("Default") +)); +``` +## 生成迁移文件以及同步迁移文件到数据库 +- 前提 + - 项目没有编辑错误 + - 项目没有在运行状态 +- 生成迁移文件 + - `dotnet ef migrations add Init` # 创建迁移快照 + - `dotnet ef database update` # 执行SQL生成数据库 +- 生成迁移文件 + - `dotnet ef migrations add Xxx` +- 同步迁移文件到数据 + - `dotnet ef database update` diff --git "a/\351\273\204\351\222\260/20260605-CRUD\346\224\271\351\200\240\345\222\214RESTful\347\232\204\350\247\204\350\214\203.md" "b/\351\273\204\351\222\260/20260605-CRUD\346\224\271\351\200\240\345\222\214RESTful\347\232\204\350\247\204\350\214\203.md" new file mode 100644 index 0000000..485e49f --- /dev/null +++ "b/\351\273\204\351\222\260/20260605-CRUD\346\224\271\351\200\240\345\222\214RESTful\347\232\204\350\247\204\350\214\203.md" @@ -0,0 +1,18 @@ +# 笔记 +- 依赖注入-定义私有变量:`private readonly AppDbContext _db;` +- 依赖注入-通过构造注入: +``` +public BookController(AppDbContext db) +{ + _db=db; +} +``` +- 核心方法: + - 查询列表:ToListAsync() + - 查询单个:FindAsync(id) + - 新增:Add(实体) + SaveChangesAsync() + - 修改:查询实体→更新属性→SaveChangesAsync() + - 删除:查询实体→Remove(实体)→SaveChangesAsync() +- 统一使用复数名词: `/api/categories` +- `get /api/cate/{cateId}/blogs` 获取指定类型下的所有的博客 +- `get /api/cate/{cateId}/blogs/{blogId}` 获取指定类型下的指定的博客 \ No newline at end of file -- Gitee From 6daecdce589f34b7fe39cab175167ea788cc6447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E9=92=B0?= <2457570067@qq.com> Date: Sun, 14 Jun 2026 17:24:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...74\350\210\252\345\261\236\346\200\247.md" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "\351\273\204\351\222\260/20260608-\344\270\200\345\257\271\345\244\232\345\257\274\350\210\252\345\261\236\346\200\247.md" diff --git "a/\351\273\204\351\222\260/20260608-\344\270\200\345\257\271\345\244\232\345\257\274\350\210\252\345\261\236\346\200\247.md" "b/\351\273\204\351\222\260/20260608-\344\270\200\345\257\271\345\244\232\345\257\274\350\210\252\345\261\236\346\200\247.md" new file mode 100644 index 0000000..c46383e --- /dev/null +++ "b/\351\273\204\351\222\260/20260608-\344\270\200\345\257\271\345\244\232\345\257\274\350\210\252\345\261\236\346\200\247.md" @@ -0,0 +1,23 @@ +# 笔记 +## 一、实体类配置 +1. 一的一方(Category) + - 包含集合导航属性:ICollection +2. 多的一方(Product) + - 包含外键:int CategoryId(命名规范:主表名 + Id) + - 包含引用导航属性:Category? Category +## 二、DbContext 关系配置 +``` +modelBuilder.Entity() + .HasOne(p => p.Category) // 商品属于一个分类 + .WithMany(c => c.Products) // 分类包含多个商品 + .HasForeignKey(p => p.CategoryId) // 外键字段 + .OnDelete(DeleteBehavior.Restrict); // 有子数据时禁止删除父数据 +``` +## 三、数据查询 +- 查商品 + 所属分类(多→一):`Include(p => p.Category)` +- 查分类 + 所有商品(一→多):`Include(c => c.Products)` +## 数据库中表关系的体现 +### 一种是数据库中实际存在关系 +- 数据库中直接创建外键关系(或者叫约束) +### 一种是数据中不实际存在关系 +- 不在数据库中直接创建外键关系,而在业务代码中,去强制维护这种关系 \ No newline at end of file -- Gitee