发布时间:2026/8/25 16:22:12
从零构建.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/8/25 16:22:12

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

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

2026/8/25 16:22:12

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/8/25 16:22:12

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

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

2026/8/25 18:58:07

单链表面试题精讲与实战技巧

1. 单链表基础与面试题核心价值单链表作为最基础的数据结构之一,在技术面试中的出场率高达70%以上。我见过太多候选人因为对单链表的基本操作理解不深刻而在面试中折戟。单链表问题看似简单,但能准确无误地写出所有边界条件的处理,需要扎实的…

2026/8/25 18:58:07

AI编程助手替代方案全解析:从Copilot到本地Ollama部署实践

这次我们来看一个开发者工具领域的热点话题:Continue 这款 AI 编程助手插件是否已经“凉了”?以及,如果它真的不再维护或难以使用,我们有哪些高质量的替代品可以选择? 对于依赖 AI 辅助编程的开发者来说,一…

2026/8/25 18:58:07

OpenClaw新闻热点抓取工具:部署、测试与API集成全指南

这次我们来看一个名为 OpenClaw 的项目。从名称和网络热词来看,它很可能是一个用于自动化抓取新闻热点的工具或框架。对于需要实时追踪舆情、分析市场动态或进行内容聚合的开发者来说,一个高效、稳定的信息抓取工具至关重要。OpenClaw 的出现&#xff0c…

2026/8/25 18:58:07

AI Agent规模化落地的工程底座:从技能复用到系统韧性

1. 从单点智能到协同智能:为什么我们需要一个“底座”?如果你最近在关注AI Agent的开发,可能会发现一个有趣的现象:大家讨论的焦点,正从“如何让一个Agent变聪明”,悄悄转向“如何让一群Agent稳定、高效地一…

2026/8/25 18:58:07

AI幻觉与语境依赖:从技术原理到工程实践的多维应对策略

1. 项目概述:当AI开始“一本正经地胡说八道”最近在跟几个做AI应用落地的朋友聊天,大家不约而同地提到了同一个让人又爱又恨的词:“幻觉”。这玩意儿就像个幽灵,时不时在你最需要它靠谱的时候,给你来点“惊喜”。比如&…

2026/8/25 18:53:07

从测试工具到智能平台:Harness如何重塑软件质量保障体系

1. 从“工具”到“智能体”:Harness概念的演进与核心价值最近在技术圈,尤其是测试和DevOps领域,“Harness”这个词的热度突然飙升。如果你去搜一下,会发现它和AI、自动化测试、智能体(Agent)这些词紧密地绑…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…