# 23级4班MVCDemo **Repository Path**: myhfw003/grade-23-class-4-mvc-demo ## Basic Information - **Project Name**: 23级4班MVCDemo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2024-12-02 - **Last Updated**: 2025-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 如何运行 1. 克隆到本地:git clone https://gitee.com/myhfw003/grade-23-class-4-mvc-demo.git 2. 需要安装SDK,项目基于net8.0,请安装对应版本 3. cd ./Blog 4. dotnet watch 5. 访问:http://localhost:5000/blogs/index,效果如下: ![20241202162330-2024-12-02-16-23-32](https://oss.9ihub.com/test/20241202162330-2024-12-02-16-23-32.png) ## 一、关于Action的返回值 1. 基础数据类型,如int、string、List<>等等 2. IActionResult,返回响应的状态码 - 视图 - 重定向 3. ActionResult,是前面2个的结合体,意思为既可以返回基础数据类型,也可以返回响应状态 4. 内容响应:JsonResult、ContentResult 5. POCO(比较老的类型对象) ## 二、视图 1. Razor 专业说法 模板引擎 - 大部分时候,我们都是通过View函数,传入数据(ViewModel)给视图,这样一来,视图中就可以通过@Model这个属性来取得这些数据 - 实际上,我们可以通过声明视图模型的类型,来获得自动提示或者自动感知 2. 在视图上显示数据的几个玩法 - 在视图上定义简单数据,在视图上显示(在视图上定义对象数据,在视图上定义集合数据,显示的问题) - 后端传回来对象数据,在视图上显示 - 在后端传回来集合数据,在视图上显示 ## 三、Linq集成查询(关联Lambda) 1. First FirstOrDefaualt 找第一个符合条件的元素 - First(x=>x.Id==id) 返回第一个Id等于id的元素,如果都没有符合的,报错 - FirstOrDefault(x=>x.Id==id) 返回第一个Id等于id的元素,如果都没有符合的,返回Null 2. Single SingleOrDefault - Single() 返回第一个元素,如果没有,报错 - SingleOrDefault() 返回第一个元素,如果没有,返回Null 3. Where - Where(x=>x.Score>=80 && x.Sex==1) 查找所有成绩大于等于80,并且性别为1的所有元素 4. Select - Select(x=>new {x.Id,x.Score}) 以新的{x.Id,x.Score}对象的形式,返回新的集合 from XX in XX where XXX select; MdBlog ## 四、数据模型 1. 数据库的选择和权衡 - Sqlserver - PostgreSQL - Mysql/MariaDb - Oracle - Db2 - Sybase 2. ORM工具的选择和使用 - EntityFrameworkCore - Dapper - SqlSuper ## 五、数据的持久化 - 结绳记事 - 甲骨文 - 木简 - 竹简 - 纸 - 账本 - 文本文件、Excel (磁盘:HDD、SSD) - 数据库 - 常见数据库 - Sqlserver - PostgreSQL - Mysql/MariaDb - - 常见ORM工具(比喻为应用和数据库之间的通讯员) - Dapper - EntityFrameworkCore - FreeSql ## 应用EntityFrameworkCore的步骤 1. 安装依赖包,命令:dotnet add package Microsoft.EntityFrameworkCore.SqlServer 2. 定义数据库表模型 ```c# namespace Blog.Models; public class Blogs { public int Id { get; set; } public string Title { get; set; } = null!; public string Content { get; set; } = null!; public string Author { get; set; } = null!; } ``` 3. 定义数据库上下文 ```C# using Microsoft.EntityFrameworkCore; namespace Blog.Models; public class BlogDbContext : DbContext { public DbSet Blogs { get; set; } = null!; // The following configures EF to create a Sqlite database file in the // special "local" folder for your platform. protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer($"Server=.\\SQLEXPRESS;database=Blog4;uid=sa;pwd=123456;TrustServerCertificate=True;"); } ``` 4. 生成迁移文件,命令:dotnet ef migrations add XXX (PS:可能需要安装如下依赖包:Microsoft.EntityFrameworkCore.Design) 5. 将上一步生成的迁移文件,更新到数据库:dotnet ef database update(PS:需要保证连接字符串正确无误,包括用户名、密码等,数据库打开,并且允许远程连接) ## 登录状态 1. Session 2. Cookies ## 部署MVC应用上云 1. 将使用的SqlServer更换为PostgreSQL - 更换数据库驱动 - 移除之前的驱动:dotnet remove package Microsft.EntityFrameworkCore.SqlServer - 安装新的驱动:dotnet add package Npgsql.EntityFrameworkCore.Postgresql - 修改数据库上下文的相关配置 - 在数据库上下文中,修改为:UseNpgsql - 修改数据库连接字符串 - 重新生成迁移文件 - 删除原来的迁移文件 - 重新生成 - 同步数据库 - dotnet ef database update 2. 部署MVC应用到云服务器 - 打包mvc应用 - 上传打包好的应用 - 如果服务器有运行环境,则可以直接运行,如果没有,则安装; - 运行这个应用 - 使用pm2托管这个应用 - 安装pm2 - 需要安装nodejs环境 - nvm版本管理 - 安装:bash -c "$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)" - source ~/.nvm/nvm.sh - nvm -v如果有返回版本号,则说明nvm安装成功 - nvm install --lts // 这个命令安装nodejs的长期支持版本 - npm config set registry=https://registry.npmmirror.com // 这个命令用于配置安装源为国内镜像 - npm i -g pm2 // 这个命令用于全局安装pm2 - 就可以愉快的玩耍了