From 626236bd9bbc65b5b1ce514514a9dc03d6ee3877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=99=93=E5=8F=B6?= Date: Sun, 25 Jan 2026 21:59:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...55\347\232\204\346\250\241\345\236\213.md" | 46 +++++++++++++++++++ ...45\346\225\260\346\215\256\345\272\223.md" | 46 +++++++++++++++++++ ...55\347\232\204\345\244\215\344\271\240.md" | 46 +++++++++++++++++++ .../20260123-MVC\344\270\255.md" | 17 +++++++ 4 files changed, 155 insertions(+) create mode 100644 "\350\265\265\346\231\223\345\217\266/20260119-MVC\344\270\255\347\232\204\346\250\241\345\236\213.md" create mode 100644 "\350\265\265\346\231\223\345\217\266/20260121-MVC\344\270\255\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" create mode 100644 "\350\265\265\346\231\223\345\217\266/20260122-MVC\344\270\255\347\232\204\345\244\215\344\271\240.md" create mode 100644 "\350\265\265\346\231\223\345\217\266/20260123-MVC\344\270\255.md" diff --git "a/\350\265\265\346\231\223\345\217\266/20260119-MVC\344\270\255\347\232\204\346\250\241\345\236\213.md" "b/\350\265\265\346\231\223\345\217\266/20260119-MVC\344\270\255\347\232\204\346\250\241\345\236\213.md" new file mode 100644 index 0000000..15ddac8 --- /dev/null +++ "b/\350\265\265\346\231\223\345\217\266/20260119-MVC\344\270\255\347\232\204\346\250\241\345\236\213.md" @@ -0,0 +1,46 @@ +# 笔记 + +## 一、模型是做什么的? +- **数据蓝图**:定义数据的结构和类型 +- **数据验证**:确保输入的数据正确有效 +- **业务逻辑**:处理数据相关操作 +- **数据库交互**:与数据库通信的桥梁 + +## 二、创建模型 +- 放在 `Models` 文件夹中 +- 一个C#类对应一个实体 +- **示例**: +```csharp +public class Student +{ + public int Id { get; set; } + public string? Name { get; set; } + public int Age { get; set; } +} +``` + +## 三、数据注解(简化) +- `[Required]`:必须填写 +- `[StringLength(50)]`:最多50个字符 +- `[EmailAddress]`:必须是邮箱格式 +- `[Display(Name="姓名")]`:显示的名称 + +## 四、视图模型 +- 为什么需要?视图显示的数据结构可能与数据库不同 +- 放在 `ViewModels` 文件夹 +- 为特定页面定制数据 + +## 五、模型绑定 +- 自动将表单数据转换成模型对象 +- 检查数据是否有效:`ModelState.IsValid` +- 验证失败时返回原页面 + +## 六、核心流程 +1. **设计模型** → 2. **添加验证** → 3. **创建视图模型** → 4. **绑定数据** → 5. **验证处理** + +## 七、重要提醒 +- 模型是MVC中的**M** +- 一个模型对应一个表(数据库) +- 验证在前端和后端都要做 +- 视图模型让页面显示更灵活 + diff --git "a/\350\265\265\346\231\223\345\217\266/20260121-MVC\344\270\255\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" "b/\350\265\265\346\231\223\345\217\266/20260121-MVC\344\270\255\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000..ac8f33d --- /dev/null +++ "b/\350\265\265\346\231\223\345\217\266/20260121-MVC\344\270\255\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,46 @@ +# EFCore及数据库连接功能引入 + +## 步骤1:安装2个包 + +### Microsoft.EntityFrameworkCore.Sqlite +- dotnet add package Microsoft.EntityFrameworkCore.Sqlite +### Microsoft.EntityFrameworkCore.Design +- dotnet add package Microsoft.EntityFrameworkCore.Design + +## 步骤2:定义数据库上下文 +### 定义数据库表 +- public DbSet Vips{get;set;} +### 配置数据库连接字符串 +- protect overwrite void OnConfiguring(DbContextOptionsBuilder options){options.UseSqlite()} + +## 步骤3:执行数据库迁移 +### 先决条件2个 +- 不能有编译错误 +- 项目不在运行状态 +### 命令 +- dotnet ef migrations add Xxx +### 如果ef工具没有安装,使用如下命令安装 +- dotnet tool install --global dotnet-ef + +## 步骤4:将迁移文件更新/应用到数据库 +- dotnet ef database update + +## 步骤5:在控制器中使用数据库上下文进行CRUD +### 新增 +- // 创建(Create) +var student = new Student { Name = "张三", Age = 20 }; +context.Students.Add(student); +await context.SaveChangesAsync(); +### 删除 +- // 删除(Delete) +context.Students.Remove(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(); \ No newline at end of file diff --git "a/\350\265\265\346\231\223\345\217\266/20260122-MVC\344\270\255\347\232\204\345\244\215\344\271\240.md" "b/\350\265\265\346\231\223\345\217\266/20260122-MVC\344\270\255\347\232\204\345\244\215\344\271\240.md" new file mode 100644 index 0000000..4ba8987 --- /dev/null +++ "b/\350\265\265\346\231\223\345\217\266/20260122-MVC\344\270\255\347\232\204\345\244\215\344\271\240.md" @@ -0,0 +1,46 @@ +# EFCore及数据库连接功能引入 + +## 步骤1:安装2个包 + +### Microsoft.EntityFrameworkCore.Sqlite +- dotnet add package Microsoft.EntityFrameworkCore.Sqlite -v 8.0 +### Microsoft.EntityFrameworkCore.Design +- dotnet add package Microsoft.EntityFrameworkCore.Design -v 8.0 + +## 步骤2:定义数据库上下文 +### 定义数据库表 +- public DbSet Vips{get;set;} +### 配置数据库连接字符串 +- protect overwrite void OnConfiguring(DbContextOptionsBuilder options){options.UseSqlite()} + +## 步骤3:执行数据库迁移 +### 先决条件2个 +- 不能有编译错误 +- 项目不在运行状态 +### 命令 +- dotnet ef migrations add Xxx +### 如果ef工具没有安装,使用如下命令安装 +- dotnet tool install --global dotnet-ef + +## 步骤4:将迁移文件更新/应用到数据库 +- dotnet ef database update + +## 步骤5:在控制器中使用数据库上下文进行CRUD +### 新增 +- // 创建(Create) +var student = new Student { Name = "张三", Age = 20 }; +context.Students.Add(student); +await context.SaveChangesAsync(); +### 删除 +- // 删除(Delete) +context.Students.Remove(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(); \ No newline at end of file diff --git "a/\350\265\265\346\231\223\345\217\266/20260123-MVC\344\270\255.md" "b/\350\265\265\346\231\223\345\217\266/20260123-MVC\344\270\255.md" new file mode 100644 index 0000000..95c51a9 --- /dev/null +++ "b/\350\265\265\346\231\223\345\217\266/20260123-MVC\344\270\255.md" @@ -0,0 +1,17 @@ +# 笔记 +查找功能 + +```bash +public IActionResult Index(string keyword) + { + // 直接使用数据库表中的数据 + IEnumerable list = db.Products; + + // 当keyword不为空时,在数据库表中查找关键内容 + if (!string.IsNullOrEmpty(keyword)) + { + list = list.Where(p => p.ProductName.Contains(keyword) || p.Tag.Contains(keyword)); + } + return View(list); + } +``` \ No newline at end of file -- Gitee