当前位置: 首页 > backend >正文

面向 C# 初学者的完整教程

🧱 一、项目结构说明

你的项目大致结构如下:

TaskManager/
├── backend/
│   ├── TaskManager.Core/           // 实体类和接口
│   ├── TaskManager.Infrastructure/ // 数据库、服务实现
│   └── TaskManager.API/            // Web API 入口(控制器 + Program.cs)
└── frontend/                       // React/Next.js 前端

✅ 二、安装依赖项

你需要先确保 .NET SDK 已安装:

1. 检查 .NET SDK 是否安装

dotnet --version

如果没有,请去官网下载并安装:https://dotnet.microsoft.com/en-us/download


2. 安装 Entity Framework Core 相关包(在项目目录执行)

# 进入 Infrastructure 项目目录
cd TaskManager.Infrastructure# 安装数据库相关包(你使用的是 SQL Server)
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package BCrypt.Net-Next     # 用户密码加密# 如果你有 API 项目也需使用 EF Core 工具支持迁移
cd ../TaskManager.API
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

🛠️ 三、构建项目

1. 回到根目录构建整个项目解决方案

cd D:\Users\gento\RiderProjects\TaskManager\backend
dotnet build

如果你已经在用 Rider 或 Visual Studio,也可以直接点击“Build”按钮。


🚀 四、数据库迁移与更新

你需要先根据实体类生成数据库表:

1. 创建数据库迁移(注意指定项目)

cd TaskManager.API
dotnet ef migrations add InitialCreate --project ../TaskManager.Infrastructure

2. 执行迁移,更新数据库

dotnet ef database update --project ../TaskManager.Infrastructure

🏃 五、运行 API 项目

运行 TaskManager.API 项目:

cd ../TaskManager.API
dotnet run

运行后你会看到:

Now listening on: http://localhost:5201

你可以用 Postman 或浏览器访问接口,例如:

  • http://localhost:5201/api/tasks
  • http://localhost:5201/api/auth/register

🧪 六、常见问题速查

问题解决方法
localStorage 报错typeof window !== 'undefined' 判断是否在浏览器环境
Token 报 401检查是否正确设置 Bearer 头、是否数据库已更新并包含用户表
EF 报 Invalid object name是数据库中表未创建成功,请重新执行迁移或检查连接字符串
DLL 被锁定,编译失败关闭正在运行的 API(任务管理器或 Ctrl+C),然后重试构建

📌 七、建议的开发流程

  1. 每次修改实体类后,执行一次迁移:dotnet ef migrations add ...
  2. 每次迁移后更新数据库:dotnet ef database update
  3. 如果构建失败先 dotnet clean,然后 dotnet build
  4. 本地调试:先运行后端,再启动前端(Next.js)
http://www.xdnf.cn/news/1425.html

相关文章:

  • 千问2.5-VL-7B的推理、微调、部署_笔记2
  • MyBatis中的@Param注解-如何传入多个不同类型的参数
  • .NET 6 + Dapper + User-Defined Table Type
  • 缓存与数据库一致性方案
  • 数据分析:用Excel做周报
  • Android开发常用外部组件及使用指南(上)
  • maple实现移位算法
  • 智驭未来:NVIDIA自动驾驶安全白皮书与实验室创新实践深度解析
  • Dart Flutter数据类型详解 int double String bool list Map
  • 亚远景-基于ASPICE标准的汽车软件过程优化路径
  • 电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?
  • Django 实现电影推荐系统:从搭建到功能完善(附源码)
  • AutoGPT超详细教程
  • SQL 时间转换的CONVERT()函数应用说明
  • Sentinel源码—9.限流算法的实现对比二
  • HSTL详解
  • 容器化-Docker-进阶
  • 高光谱相机在工业检测中的应用:LED屏检、PCB板缺陷检测
  • 软件项目实施全流程及交付物清单
  • 【教学类-102-17】蝴蝶三色图(用最大长宽作图,填入横板和竖版共16个WORD单元格模版大小,制作大小图)
  • Lodash 初学指南(适用于 Vue 3)​
  • 如何将IDP映射属性添加,到accountToken中 方便项目获取登录人信息
  • centos7部署k8s集群
  • 介绍 IntelliJ IDEA 快捷键操作
  • OpenBayes 一周速览|EasyControl 高效控制 DiT 架构,助力吉卜力风图像一键生成;TripoSG 单图秒变高保真 3D 模型
  • 移动端使用keep-alive将页面缓存和滚动缓存具体实现方法 - 详解
  • 【数据结构和算法】6. 哈希表
  • 无人船 | 图解基于PID控制的路径跟踪算法(以欠驱动无人艇Otter为例)
  • 解锁现代生活健康密码,开启养生新方式
  • 计算机网络笔记(六)——1.6计算机网络的性能