从零构建.NET全栈应用:ASP.NET Core MVC与EF Core实战教程

发布时间:2026/10/29 6:36:13

从零构建.NET全栈应用:ASP.NET Core MVC与EF Core实战教程 最近在带新人做项目时发现很多刚接触 .NET 全栈开发的同学面对 C#、ASP.NET Core、EF Core、SQL Server 这一套技术栈常常感到无从下手。环境搭建、项目结构、前后端交互、数据库操作每一步都可能遇到意想不到的坑。本文将以一个完整的“图书管理系统”为例手把手带你从零开始使用最新的 .NET 10、ASP.NET Core MVC、EF Core 和 SQL Server 2025结合 Bootstrap 5 前端框架构建一个功能齐全的全栈应用。无论你是刚学完 C# 语法的新手还是想从其他技术栈转型过来的开发者都能通过这篇教程系统地掌握 .NET 全栈开发的核心流程和工程化实践。1. 技术栈全景与核心概念在动手编码之前我们先来理解一下这套技术栈中每个组件扮演的角色以及它们如何协同工作。1.1 各组件职责解析C#这是我们整个应用的“编程语言”。它是一种强类型、面向对象的现代语言运行在 .NET 运行时上。你可以把它理解为构建整个应用大厦的“砖块”和“水泥”。.NET 10 / .NET 8这是微软推出的统一开发平台包含了运行时CLR、基础类库BCL和一系列 SDK 工具。我们选择 .NET 10或当前最新的 LTS 版本如 .NET 8意味着我们能使用最新的语言特性、性能优化和安全更新。它负责将我们写的 C# 代码编译成中间语言IL并在运行时管理内存、执行代码。ASP.NET Core MVC这是一个用于构建 Web 应用程序的框架。它基于 .NET 平台并采用了经典的MVCModel-View-Controller设计模式。Model模型代表应用程序的数据和业务逻辑。在我们的例子中Book、Author这些类就是模型。View视图负责呈现用户界面。通常是由 HTML、Razor 语法和 Bootstrap 组件构成的.cshtml文件。Controller控制器处理用户请求如点击链接、提交表单。它从 Model 获取数据然后选择合适的 View 来展示结果。ASP.NET Core是跨平台的可以在 Windows、Linux 和 macOS 上运行。Entity Framework Core (EF Core)这是一个对象关系映射器ORM。它的主要工作是充当 C# 对象我们的 Model和关系型数据库如 SQL Server之间的“翻译官”。我们不再需要手写大量的 SQL 语句来创建表、插入或查询数据而是通过操作 C# 对象由 EF Core 自动生成并执行对应的 SQL 命令。这极大地提高了开发效率和数据访问的安全性减少 SQL 注入风险。SQL Server 2025这是我们选择的关系型数据库管理系统RDBMS用于持久化存储应用数据如图书信息、作者信息。SQL Server 2025 是微软数据库产品线的最新版本注截至知识截止日期SQL Server 2022 是最新稳定版此处以“SQL Server 2025”代指最新或目标版本实际开发请使用 SQL Server 2019/2022 或更高版本。我们将通过 EF Core 与它交互。Bootstrap 5这是一个流行的前端CSS 框架。它提供了一套预制的、响应式的 UI 组件如按钮、表单、导航栏、卡片和工具类让我们能用很少的 CSS 代码快速构建出美观、且能在各种屏幕尺寸上正常显示的界面。1.2 数据流向与架构概览理解了单个组件后我们来看它们如何串联起来处理一次典型的用户请求例如“查看图书列表”用户在浏览器中输入网址或点击链接发起一个 HTTP 请求如GET /Books。请求到达 ASP.NET Core 应用。路由系统将请求映射到对应的Controller如BooksController和Action 方法如Index()。Controller中的Index方法调用EF Core。EF Core将操作如_context.Books.ToListAsync()翻译成 SQL 语句SELECT * FROM Books发送给SQL Server数据库。SQL Server执行查询并将结果集返回给 EF Core。EF Core将结果集水合Hydrate成 C# 对象列表ListBook返回给 Controller。Controller将这个书籍列表Model传递给对应的ViewViews/Books/Index.cshtml。View引擎Razor将 Model 数据与 HTML/Bootstrap 模板结合生成最终的 HTML 页面。ASP.NET Core 将这个 HTML 页面作为 HTTP 响应发送回用户的浏览器。浏览器渲染页面用户看到美观的图书列表。这个流程清晰地展示了从用户交互到数据持久化再返回视图的全过程这也是全栈开发的核心。2. 开发环境搭建与项目初始化工欲善其事必先利其器。我们先来准备好开发所需的全部工具。2.1 必备软件安装请按顺序安装以下软件并确保安装成功.NET SDK (10.0 或 8.0 LTS)前往 .NET 官方下载页面 。下载并安装最新的 .NET SDK建议选择 .NET 8.0 LTS 或更高版本教程命令通用。安装后打开命令行CMD、PowerShell 或终端输入dotnet --version应能显示版本号。集成开发环境 (IDE)Visual Studio 2022 (社区版免费)功能最全对 .NET 开发支持最好。 下载地址 。Visual Studio Code (免费)轻量级需额外安装 C# 扩展。适合喜欢简洁的开发者。 下载地址 。本教程后续命令行操作均通用。SQL Server 2022 Developer (或 Express) Edition前往 SQL Server 下载页面 。下载SQL Server 2022 Developer版本免费用于开发测试。运行安装程序在“功能选择”中至少勾选“数据库引擎服务”。安装过程中会提示你设置身份验证模式。请务必选择“混合模式SQL Server 身份验证和 Windows 身份验证”并为自己设置的sa账户设置一个强密码牢记它安装完成后建议安装SQL Server Management Studio (SSMS)这是一个图形化管理工具便于查看数据库。 SSMS 下载地址 。2.2 创建 ASP.NET Core MVC 项目我们将使用 .NET CLI命令行接口来创建项目这是最通用和高效的方式。打开终端在你想创建项目的目录下打开 PowerShell、CMD 或 Bash 终端。创建解决方案和项目# 创建一个名为 BookManagementSystem 的解决方案文件 dotnet new sln -n BookManagementSystem # 创建一个名为 BookManagementSystem.Web 的 ASP.NET Core MVC 项目 dotnet new mvc -n BookManagementSystem.Web -f net8.0 --auth Individual # 将项目添加到解决方案中 dotnet sln add BookManagementSystem.Web/BookManagementSystem.Web.csproj-f net8.0指定目标框架为 .NET 8.0与 .NET 10 开发体验高度一致。--auth Individual创建项目时包含个人用户账户的身份验证和授权脚手架。这对于大多数需要用户登录的系统非常有用它会自动生成注册、登录、管理账户的页面和逻辑。打开项目使用cd BookManagementSystem.Web进入项目目录然后用你的 IDE如code .用 VS Code 打开或用 Visual Studio 打开.sln文件打开项目。2.3 初始项目结构解析用 IDE 打开项目后你会看到类似如下的结构BookManagementSystem.Web/ ├── Controllers/ # 控制器类处理HTTP请求 ├── Models/ # 数据模型和视图模型 ├── Views/ # Razor视图文件 (.cshtml) ├── wwwroot/ # 静态资源 (CSS, JS, 图片) ├── appsettings.json # 应用程序配置 (如数据库连接字符串) ├── Program.cs # 应用程序的主入口和服务配置 └── BookManagementSystem.Web.csproj # 项目文件管理依赖这个结构是 ASP.NET Core MVC 的标准模板为我们提供了一个清晰的起点。3. 集成 Entity Framework Core 与 SQL Server接下来我们将 EF Core 和 SQL Server 驱动引入项目并配置数据库连接。3.1 安装必要的 NuGet 包在项目根目录BookManagementSystem.Web下运行以下命令# 安装 EF Core 的 SQL Server 数据库提供程序 dotnet add package Microsoft.EntityFrameworkCore.SqlServer # 安装 EF Core 的设计时工具用于生成数据库迁移 dotnet add package Microsoft.EntityFrameworkCore.Tools # 安装 EF Core 的脚手架工具可选用于从数据库生成模型 # dotnet add package Microsoft.EntityFrameworkCore.Design这些包会被自动添加到你的.csproj文件中。3.2 定义数据模型 (Model)在Models文件夹下我们创建两个类Author作者和Book图书。它们之间是一对多的关系一个作者可以写多本书。Models/Author.csusing System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace BookManagementSystem.Web.Models { public class Author { public int Id { get; set; } // 主键 [Required] [Display(Name 作者姓名)] [StringLength(100)] public string Name { get; set; } string.Empty; [Display(Name 简介)] [DataType(DataType.MultilineText)] public string? Bio { get; set; } // 可空类型表示字段可选 // 导航属性一个作者拥有多本书 public ICollectionBook Books { get; set; } new ListBook(); } }Models/Book.csusing System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace BookManagementSystem.Web.Models { public class Book { public int Id { get; set; } [Required] [Display(Name 书名)] [StringLength(200)] public string Title { get; set; } string.Empty; [Display(Name 国际标准书号)] [StringLength(20)] public string? ISBN { get; set; } [Required] [Display(Name 出版日期)] [DataType(DataType.Date)] public DateTime PublishDate { get; set; } [Display(Name 简介)] [DataType(DataType.MultilineText)] public string? Description { get; set; } // 外键指向 Author 表 [Display(Name 作者)] public int AuthorId { get; set; } // 导航属性一本书属于一个作者 [ForeignKey(nameof(AuthorId))] public Author Author { get; set; } null!; // 使用空包容运算符EF Core会处理 } }[Required],[StringLength],[Display],[DataType]这些是数据注解Data Annotations用于定义验证规则和显示信息它们会被 MVC 的模型绑定和验证系统以及 EF Core 的迁移所使用。[ForeignKey]属性明确指定了外键关系。3.3 创建数据库上下文 (DbContext)DbContext 是 EF Core 的核心类它代表与数据库的一个会话用于查询和保存数据。在Models文件夹或新建一个Data文件夹下创建ApplicationDbContext.csModels/ApplicationDbContext.csusing Microsoft.EntityFrameworkCore; namespace BookManagementSystem.Web.Models { public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptionsApplicationDbContext options) : base(options) { } // 将 C# 模型映射到数据库表 public DbSetBook Books { get; set; } public DbSetAuthor Authors { get; set; } // 可以在这里用 Fluent API 进行更复杂的配置可选 protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 示例为 Book 表的 Title 字段创建索引 modelBuilder.EntityBook() .HasIndex(b b.Title); // 示例设置级联删除规则当作者被删除时其所有书籍也被删除 modelBuilder.EntityBook() .HasOne(b b.Author) .WithMany(a a.Books) .HasForeignKey(b b.AuthorId) .OnDelete(DeleteBehavior.Cascade); } } }3.4 配置数据库连接字符串打开appsettings.json文件添加ConnectionStrings部分。将YourServerName和YourPassword替换为你安装 SQL Server 时的实际信息。appsettings.json{ ConnectionStrings: { DefaultConnection: Serverlocalhost;DatabaseBookManagementDB;Trusted_ConnectionTrue;TrustServerCertificateTrue; // 如果使用 SQL Server 身份验证请使用以下格式 // DefaultConnection: Serverlocalhost;DatabaseBookManagementDB;User Idsa;PasswordYourPassword;TrustServerCertificateTrue; }, Logging: { LogLevel: { Default: Information, Microsoft.AspNetCore: Warning } }, AllowedHosts: * }Serverlocalhost连接本地 SQL Server 实例。DatabaseBookManagementDB将要创建的数据库名称。Trusted_ConnectionTrue使用 Windows 身份验证推荐更安全。TrustServerCertificateTrue在本地开发时信任自签名证书避免连接错误。3.5 在 Program.cs 中注册服务打开Program.cs文件这是 ASP.NET Core 6 启动和配置服务的入口。Program.csusing BookManagementSystem.Web.Models; using Microsoft.EntityFrameworkCore; var builder WebApplication.CreateBuilder(args); // 从配置中读取连接字符串 var connectionString builder.Configuration.GetConnectionString(DefaultConnection); // 将 ApplicationDbContext 注册为服务使用 SQL Server builder.Services.AddDbContextApplicationDbContext(options options.UseSqlServer(connectionString)); // 添加其他默认服务如 MVC、身份认证等 builder.Services.AddControllersWithViews(); var app builder.Build(); // 配置 HTTP 请求管道... if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler(/Home/Error); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 确保在 UseRouting 之后UseEndpoints 之前 app.MapControllerRoute( name: default, pattern: {controllerHome}/{actionIndex}/{id?}); app.Run();至此EF Core 和 SQL Server 的集成配置完成。4. 使用 Code First 迁移创建数据库EF Core 的 Code First 方法允许我们通过 C# 代码模型来定义数据库结构然后通过“迁移Migration”命令来创建或更新数据库。创建初始迁移在终端中确保位于项目目录 (BookManagementSystem.Web)运行dotnet ef migrations add InitialCreate这个命令会扫描你的DbContext和所有DbSetT引用的模型与当前数据库状态目前为空进行比较然后在Migrations文件夹下生成一系列 C# 文件如20250101000000_InitialCreate.cs这些文件记录了创建Authors和Books表的 SQL 脚本。将迁移应用到数据库运行以下命令EF Core 会执行迁移文件中的 SQL在 SQL Server 中创建数据库和表。dotnet ef database update验证打开SQL Server Management Studio (SSMS)连接到你的本地服务器你应该能看到一个名为BookManagementDB的数据库里面包含Authors和Books两张表其结构与我们定义的模型一致。5. 实现 CRUD 功能与 MVC 协作现在我们为Book实体实现完整的增删改查CRUD功能。5.1 生成 Scaffolded 控制器和视图快速入门ASP.NET Core 提供了强大的脚手架工具可以根据模型自动生成控制器和视图。在项目目录下运行# 为 Book 模型生成带有视图的控制器使用 ApplicationDbContext dotnet aspnet-codegenerator controller -name BooksController -m Book -dc ApplicationDbContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries这个命令会在Controllers文件夹下创建BooksController.cs。在Views文件夹下创建Books子文件夹并生成Index,Create,Edit,Details,Delete等视图文件.cshtml。这是快速上手的绝佳方式生成后你立即可以# 1. 两数之和题目给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出 和为目标值 target 的那 两个 整数并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。思路使用哈希表将数组中的元素作为key下标作为value遍历数组如果target - nums[i] 在哈希表中存在那么返回两个下标如果不存在将当前元素和下标存入哈希表代码class Solution { public: vectorint twoSum(vectorint nums, int target) { unordered_mapint,int map; for(int i 0; i nums.size(); i) { // 遍历当前元素并且在map中寻找是否有匹配的key auto iter map.find(target - nums[i]); if(iter ! map.end()) { // 找到了 return {iter-second,i}; } // 如果没有找到匹配对就将访问过的元素和下标加入到map中 map.insert(pairint,int(nums[i],i)); } return {}; } };
延伸阅读

更多相关文章

2026/10/27 12:48:49

用Python处理数据分析:实战项目复盘

抛开教科书式的“数据分析流程”,真实世界里的Python实战项目,总会在你最意想不到的地方给你一记闷棍。这份复盘不打算教你函数语法,而是完整回放一次从需求混沌到交付惊魂的全过程,记录下那些被数据噪音掩盖的决策瞬间和栽过的坑…

2026/10/29 8:07:49

C#全栈开发实战:.NET 10+ASP.NET Core MVC+EF Core+SQL Server+Bootstrap

这次我们来看一个面向新手的全栈技术栈组合:C# .NET 10 ASP.NET Core MVC EF Core SQL Server 2025 Bootstrap。这套组合不是某个具体的开源项目,而是一个经过验证的、能让你从零开始构建现代Web应用的完整技术方案。它的核心价值在于,将…

2026/10/25 2:54:02

Codex与Atomic Bot:云端AI后台任务服务的核心能力与应用实践

这次我们来看一个 Codex 上线 Atomic Bot 的消息。简单说,这是一个能让 AI 任务在云端后台持续运行的服务。如果你经常需要处理一些耗时的 AI 任务,比如批量推理、长文本处理,或者希望自己的应用能 7x24 小时调用 AI 能力而不必担心本地机器关…

2026/10/29 10:09:51

SAP电信行业解决方案:从计费合并到序列号管理的落地指南

简介:在通信与网络行业中,SAP电信行业解决方案的专题资料适合业务管理人员、IT规划人员及信息化决策者阅读。资源打包为单个PDF文件,大小43KB,篇幅精练但要点集中,适合快速通读后用于方案对比或内部培训参考。已有384人…

2026/10/29 10:09:51

李晓峰通信原理AM调制PPT:从公式到Python/MATLAB可执行仿真

简介:本资源是电子科技大学《通信原理》课程(李晓峰版)第3章“模拟传输”的配套教学课件,面向通信工程、电子信息类本科生及考研复习者,系统讲解模拟通信核心机制与工程实现要点。课件以PPT形式呈现,共1个文…

2026/10/29 10:09:51

分布鲁棒薛定谔桥:面向不确定数据的最优传输新范式

1. 项目概述:这不是一个“桥”,而是一场在概率分布悬崖边的精密校准“Distributionally Robust Schrdinger Bridge”——光看这个标题,你可能会以为这是某部硬核科幻片的副标题,或者某个量子物理实验室刚贴在白板上的待解方程。但…

2026/10/29 10:09:51

插件加载失败排查指南:从web boot到Harness、MusicFree实战

做嵌入式、写前端、跑 CI/CD 流水线的人,大概率都在某个下午撞见过一行和 plugins 有关的报错。你明明按文档装了插件,结果程序起来时弹一句failed to load plugins,后面还跟着一串看不太懂的包名,比如web boot: 2 entries did no…

2026/10/29 10:09:51

云原生迁移实战:从传统部署到Kubernetes的五大关键决策

1. 传统部署与云原生的本质差异十年前我刚入行时,企业应用部署还停留在物理服务器手动配置的阶段。记得有次凌晨三点还在机房蹲着调试网络端口,这种经历让我深刻理解传统架构的痛点。云原生技术的出现彻底改变了游戏规则,但迁移过程绝非简单的…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑