From c61c702f56d16a1392fde77a1d636d4af71369bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Sun, 25 Jan 2026 20:35:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\344\270\212\344\270\213\346\226\207.md" | 37 +++++++++ ...15\347\275\256\350\277\236\346\216\245.md" | 22 ++++++ ...73\346\225\260\346\215\256\345\272\223.md" | 37 +++++++++ ...60\346\215\256\346\223\215\344\275\234.md" | 75 +++++++++++++++++++ 4 files changed, 171 insertions(+) create mode 100644 "\351\231\210\346\235\250\346\226\207/20260119-\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\344\270\212\344\270\213\346\226\207.md" create mode 100644 "\351\231\210\346\235\250\346\226\207/20260121-\351\205\215\347\275\256\350\277\236\346\216\245.md" create mode 100644 "\351\231\210\346\235\250\346\226\207/20260122-\350\277\201\347\247\273\346\225\260\346\215\256\345\272\223.md" create mode 100644 "\351\231\210\346\235\250\346\226\207/20260123-\346\225\260\346\215\256\346\223\215\344\275\234.md" diff --git "a/\351\231\210\346\235\250\346\226\207/20260119-\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\344\270\212\344\270\213\346\226\207.md" "b/\351\231\210\346\235\250\346\226\207/20260119-\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\344\270\212\344\270\213\346\226\207.md" new file mode 100644 index 0000000..c855a72 --- /dev/null +++ "b/\351\231\210\346\235\250\346\226\207/20260119-\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\344\270\212\344\270\213\346\226\207.md" @@ -0,0 +1,37 @@ +# EFCore与数据库 + +## ASP.NET Core MVC 数据库操作笔记 + +### 1. **项目结构** + +```text +Controllers/ (控制器层) +Models/ (模型层/实体类) +Views/ (视图层) +Data/ (DbContext和数据配置) +``` + +### 2. **核心组件** + +### **DbContext (数据库上下文)** + +```csharp +public class AppDbContext : DbContext +{ + public DbSet Products { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder options) + => options.UseSqlServer(connectionString); +} +``` + +### **实体模型 (Model)** + +```csharp +public class Product +{ + public int Id { get; set; } + public string Name { get; set; } + public decimal Price { get; set; } +} +``` \ No newline at end of file diff --git "a/\351\231\210\346\235\250\346\226\207/20260121-\351\205\215\347\275\256\350\277\236\346\216\245.md" "b/\351\231\210\346\235\250\346\226\207/20260121-\351\205\215\347\275\256\350\277\236\346\216\245.md" new file mode 100644 index 0000000..a59210a --- /dev/null +++ "b/\351\231\210\346\235\250\346\226\207/20260121-\351\205\215\347\275\256\350\277\236\346\216\245.md" @@ -0,0 +1,22 @@ + +# 笔记 + +## 知识点2:配置DbContext和数据连接 +2.1 什么是DbContext? +DbContext是EF Core的核心类,它: + +管理数据库连接 +跟踪实体状态变化 +执行数据库操作 +管理事务 +2.2 创建DbContext的步骤 +创建继承自DbContext的类 +添加DbSet属性来表示表 +配置数据库连接字符串 +在Program.cs中注册DbContext服务 +2.3 SQLite数据库 +SQLite是一个嵌入式的、零配置的数据库引擎: + +数据库存储在单个文件中(如:students.db) +不需要安装或配置数据库服务器 +适合开发、测试和小型应用 \ No newline at end of file diff --git "a/\351\231\210\346\235\250\346\226\207/20260122-\350\277\201\347\247\273\346\225\260\346\215\256\345\272\223.md" "b/\351\231\210\346\235\250\346\226\207/20260122-\350\277\201\347\247\273\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000..1816cbd --- /dev/null +++ "b/\351\231\210\346\235\250\346\226\207/20260122-\350\277\201\347\247\273\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,37 @@ +# 笔记 + +## 3.1 什么是迁移? +迁移是EF Core将模型变更同步到数据库的方式。 + +迁移的作用: + +1. 记录模型变更的历史 +2. 生成SQL脚本更新数据库结构 +3. 支持版本控制和回滚 + +## 3.2 迁移工作流程 + +``` +修改模型 → 创建迁移 → 应用迁移 → 数据库更新 +``` + +## 3.3 常用迁移命令 + +``` +# 安装EF Core工具(如果尚未安装) +dotnet tool install --global dotnet-ef + +# 创建迁移 +dotnet ef migrations add InitialCreate + +# 应用迁移到数据库 +dotnet ef database update + +# 删除最近一次迁移 +dotnet ef migrations remove + +# 生成SQL脚本(不执行) +dotnet ef migrations script + +# 更新到特定迁移 +dotnet ef database update TargetMigration \ No newline at end of file diff --git "a/\351\231\210\346\235\250\346\226\207/20260123-\346\225\260\346\215\256\346\223\215\344\275\234.md" "b/\351\231\210\346\235\250\346\226\207/20260123-\346\225\260\346\215\256\346\223\215\344\275\234.md" new file mode 100644 index 0000000..71c3302 --- /dev/null +++ "b/\351\231\210\346\235\250\346\226\207/20260123-\346\225\260\346\215\256\346\223\215\344\275\234.md" @@ -0,0 +1,75 @@ + +# 笔记 + +#### **4.1 CRUD操作** + +``` +// 创建(Create) +var student = new Student { Name = "张三", Age = 20 }; +context.Students.Add(student); +await context.SaveChangesAsync(); + +// 读取(Read) +var student = await context.Students.FindAsync(id); // 按主键查找 +var students = await context.Students.Where(s => s.Age > 18).ToListAsync(); + +// 更新(Update) +student.Name = "李四"; +context.Students.Update(student); +await context.SaveChangesAsync(); + +// 删除(Delete) +context.Students.Remove(student); +await context.SaveChangesAsync(); +``` + +#### **4.2 实体状态** + +每个实体都有以下状态之一: + +- **Detached**:未跟踪 +- **Added**:已添加,但未保存 +- **Unchanged**:未修改 +- **Modified**:已修改 +- **Deleted**:已删除 + +#### **4.3 查询优化** + +``` +// 延迟加载 vs 立即加载 +var students = context.Students.ToList(); // 立即加载所有 + +// 筛选和排序 +var result = context.Students + .Where(s => s.Age > 18) + .OrderBy(s => s.Name) + .Skip(10).Take(10) // 分页 + .ToList(); + +// 选择特定字段(减少数据传输) +var names = context.Students + .Select(s => new { s.Id, s.Name }) + .ToList(); +``` + +------ + +## **3. 任务实施:配置EF Core和SQLite** + +### **步骤1:安装必要的NuGet包** + +在项目根目录运行以下命令: + +``` +# 安装EF Core SQLite提供程序 +dotnet add package Microsoft.EntityFrameworkCore.Sqlite + +# 安装EF Core设计工具(用于迁移) +dotnet add package Microsoft.EntityFrameworkCore.Design + +# 安装EF Core工具(用于命令行) +dotnet add package Microsoft.EntityFrameworkCore.Tools + +# 安装SQLite浏览器(可选,用于查看数据库) +# 可以从 https://sqlitebrowser.org/ 下载 +``` \ No newline at end of file -- Gitee