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

跟着AI学习C#之项目实战-电商平台 Day1

📅 Day 1:项目初始化与基础模型搭建

今天是项目的第一天,我们将创建项目的结构,并为数据库上下文和迁移做好准备。同时,我们还会实现 ProductCategory 模型,并使用种子数据初始化部分商品信息。

🎯 目标:
  • 创建项目结构:使用 ASP.NET Core 创建一个新的 Web 应用程序。
  • 添加数据库上下文和迁移:配置 Entity Framework Core 来管理我们的数据库。
  • 实现 ProductCategory 模型:定义电商系统中的核心实体。
  • 使用种子数据初始化部分商品信息:确保应用程序启动时有一些示例数据可用。

步骤 1:创建新的 ASP.NET Core 项目

首先,打开 Visual Studio 或 VS Code 并创建一个新的 ASP.NET Core Web 应用程序项目(如果使用命令行工具,则可以运行以下命令):

dotnet new webapp -o ECommercePlatform

这将生成一个名为 ECommercePlatform 的新项目。


步骤 2:添加 Entity Framework Core 包

在项目中集成 Entity Framework Core,以便我们可以使用它来管理数据库。打开终端并运行以下命令来安装所需的 NuGet 包:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

如果你希望支持 SQLite 数据库,也可以选择安装相应的包:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

步骤 3:配置数据库上下文

接下来,在 Data 文件夹下创建一个名为 ApplicationDbContext.cs 的文件,并编写如下代码:

using Microsoft.EntityFrameworkCore;namespace ECommercePlatform.Data
{public class ApplicationDbContext : DbContext{public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){}// 定义 DbSets (表)public DbSet<Product> Products { get; set; }public DbSet<Category> Categories { get; set; }}
}

步骤 4:定义 ProductCategory 模型

Models 文件夹中创建两个类文件:Product.csCategory.cs,并分别为它们定义属性。

Product.cs:

namespace ECommercePlatform.Models
{public class Product{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public decimal Price { get; set; }public int CategoryId { get; set; }public Category Category { get; set; }}
}

Category.cs:

namespace ECommercePlatform.Models
{public class Category{public int Id { get; set; }public string Name { get; set; }public ICollection<Product> Products { get; set; }}
}

步骤 5:配置 Startup.cs / Program.cs

根据你使用的 ASP.NET Core 版本(3.x 或更高版本),你需要在 Startup.csProgram.cs 中注册数据库上下文和服务。

对于 .NET 6 及以上版本(Program.cs 示例):

var builder = WebApplication.CreateBuilder(args);// 添加服务到容器。
builder.Services.AddRazorPages();
builder.Services.AddDbContext<ApplicationDbContext>(options =>options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));var app = builder.Build();// 配置 HTTP 请求管道。
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");app.UseHsts();
}app.UseHttpsRedirection();
app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.MapRazorPages();app.Run();

请确保在 appsettings.json 中正确设置了数据库连接字符串:

{"ConnectionStrings": {"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ECommercePlatformDb;Trusted_Connection=True;"},...
}

步骤 6:创建初始迁移

现在,让我们为我们的模型创建第一个迁移。在终端中运行以下命令:

dotnet ef migrations add InitialCreate
dotnet ef database update

这些命令会创建必要的数据库架构并将它们应用到数据库中。


步骤 7:添加种子数据

为了使开发更加方便,我们可以向数据库添加一些初始数据。可以在 ApplicationDbContext 类中添加一个方法来处理种子数据:

public static void Initialize(IServiceProvider serviceProvider)
{using var context = new ApplicationDbContext(serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>());if (context.Database.EnsureCreated()){if (!context.Categories.Any()){context.Categories.AddRange(new Category { Name = "Electronics" },new Category { Name = "Books" },new Category { Name = "Clothing" });context.SaveChanges();}if (!context.Products.Any()){context.Products.AddRange(new Product { Name = "Laptop", Description = "High-performance laptop.", Price = 999.99M, CategoryId = 1 },new Product { Name = "Novel", Description = "A gripping novel.", Price = 19.99M, CategoryId = 2 },new Product { Name = "T-Shirt", Description = "Comfortable cotton t-shirt.", Price = 9.99M, CategoryId = 3 });context.SaveChanges();}}
}

然后在 Program.cs 中调用此方法以确保在应用程序启动时填充数据库:

var scopeFactory = app.Services.GetService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{var services = scope.ServiceProvider;var context = services.GetRequiredService<ApplicationDbContext>();context.Initialize(services);
}

恭喜!第一天的任务已经完成。你现在有了一个基本的 ASP.NET Core 项目框架,并且已经配置好了数据库上下文、模型以及一些初始数据。明天我们将继续构建商品展示页面。

http://www.lryc.cn/news/575728.html

相关文章:

  • Python打卡:Day36
  • mac电脑安装vscode的力扣插件报错解决办法
  • 板凳-------Mysql cookbook学习 (十--11)
  • Spring Boot高并发 锁的使用方法
  • Flutter 多平台项目开发指南
  • 使用java语言,计算202503291434距离当前时间,是否大于三天
  • SQL SERVER存储过程
  • 赋能 Java 工程,飞算科技重新定义智能开发
  • 自动化测试--app自动化测试之给手机设置锁屏图案
  • 桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏
  • httpClient连接配置超时时间该设置多长才合适?
  • 从提示工程(Prompt Engineering)到上下文工程(Context Engineering)
  • 【RabbitMQ】多系统下的安装配置与编码使用(python)
  • 深入解析Python多服务器监控告警系统:从原理到生产部署
  • Linux IPV4/IPV6配置终极指南
  • 解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练
  • java解决超大二维矩阵数组引起的内存占用过大问题
  • 【redis使用场景——缓存——数据过期策略 】
  • 新手向:Neo4j的安装与使用
  • CTF:PHP 多关卡绕过挑战
  • Flink部署与应用——Flink架构概览
  • 国外开源客服系统chathoot部署,使用教程
  • 信息化系统流程管理模块,企业高价值资产的跨省/市运输审批流程的功能
  • 网络安全之SQL RCE漏洞
  • AI 口语陪练:教育领域的新变革​
  • AI智能体——OpenManus 源码学习
  • 使用 ReAct 框架在 Ollama 中实现本地代理(Agent)
  • Docker安装Mysql、配置文件挂载、修改Mysql编码
  • Python-7-读取/写入文件数据
  • Rust与Go:GAN实战对决