本文继续学习微软ASP.NET Core教程中的EF Core部分。教程分为普通web程序中使用EF Core和MVC项目中使用EF Core。微软的示例是构建基本的大学网站,可以查看和更新学生、课程和讲师信息。
文本先从普通web程序使用EF Core学起,微软示例中使用SQLite数据库,本文中改为MySql数据库。
首先创建ASP.NET Core web程序,执行下列名称创建web项目,同时添加mysql相关的程序集引用。
//创建项目
dotnet new webapp -o ChinaUniversity
cd ChinaUniversity
//添加项目引用
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package MySql.EntityFrameworkCore
dotnet add Pomelo.EntityFrameworkCore.MySql
然后创建数据库,参照微软在ASP.NET Core示例项目(显示和管理高校学生选课数据库)中的数据库在mysql中创建对应数据库表。同时执行下列命令创建数据库表对应的对象类和数据库操作类。
dotnet ef dbcontext scaffold "server=localhost;uid=XXXX;pwd=XXXX;database=ChinaUniversityDB" Pomelo.EntityFrameworkCore.MySql -o Models -f
运行下列名称生成与学生页相关的基架(增删改查页面,同时创建数据库操作类,并在appsettings.json增加数据库连接字符串)。
dotnet-aspnet-codegenerator razorpage -m Student -dc ChinaUniversity.Models.ChinaUniversityDBContext -outDir Pages/Students
命令运行后,在终端显示下列提示信息,应该是没有添加Microsoft.VisualStudio.Web. CodeGeneration.Design程序集。执行dotnet add package命令添加该程序集。
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
在program文件中添加数据库操作类,同时根据教程调用函数AddDatabaseDeveloperPageExceptionFilter函数(需引用程序集Microsoft.AspNetCore.Diagnostics. EntityFrameworkCore)。
using ChinaUniversity.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<ChinaUniversityDBContext>();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
目前数据库表中没有数据,为便于后续测试,将微软教程中的数据库数据初始化类添加到项目中,并在program文件中调用,调用的代码如下所示:
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<ChinaUniversityDBContext>();
DbInitializer.Initialize(context);
}
编译并运行项目,项目启动时就会调用数据初始化类向数据库中添加测试数据。项目运行前后的数据库表内容变化如下所示:
项目运行前数据库表内容为空
项目运行后数据库表中增加了测试数据
至此,项目的基本结构已搭建完成(数据库、测试数据、对象类、基本页面等),后续还会继续跟着微软的教程完善项目内容。
参考文献:
[1]https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-rp/intro?view=aspnetcore-5.0&tabs=visual-studio-code
[2]https://www.cnblogs.com/xiaoahui/p/11899488.html
[3]https://www.cnblogs.com/51net/p/12421010.html
[4]https://github.com/dotnet/AspNetCore.Docs/tree/main/aspnetcore/data/ef-rp/intro/samples