Appearance
结合使用 ASP.NET Core 和 EF Core
创建项目
sh
$ dotnet new web -o WebAndEFCoreSamples集成 OpenAPI 文档(可选)
sh
$ cd WebAndEFCoreSamples
$ dotnet add package Microsoft.AspNetCore.OpenApi
$ dotnet add package Scalar.AspNetCore修改 Program.cs 中的代码:
c#
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
// 使用 AddOpenApi 扩展方法添加 OpenAPI 服务
builder.Services.AddOpenApi();
var app = builder.Build();
// 在开发环境下
if (app.Environment.IsDevelopment())
{
// 使用 MapOpenApi 扩展方法在应用上设置一个终结点,以查看 JSON 格式的 OpenAPI 文档
app.MapOpenApi();
// 使用 MapOpenApi 扩展方法基于 OpenAPI 文档生成美观的 API 参考文档
app.MapScalarApiReference();
}
app.MapGet("/", () => "Hello World!");
app.Run();将 EF Core 添加到项目
创建模型
定义构成模型的上下文类和实体类。
实体类
EF Core 将数据模型映射到数据库表。
c#
namespace WebAndEFCoreSamples;
public class User
{
public int Id { get; set; }
public string? Name { get; set; }
public int? Age { get; set; }
}上下文类
DbContext 表示用于查询和保存数据库中实体实例的连接或会话。
c#
using Microsoft.EntityFrameworkCore;
namespace WebAndEFCoreSamples;
public class UserDb(DbContextOptions options) : DbContext(options)
{
public DbSet<User> Users { get; set; }
}使用内存数据库(可选)
- 安装 Microsoft.EntityFrameworkCore.InMemory
sh
$ dotnet add package Microsoft.EntityFrameworkCore.InMemory- 注入 DbContext
EF Core 可以使用 Program.cs 中的 AddDbContext 添加到依赖注入配置。
c#
// 将 DbContext 添加到依赖注入配置(内存数据库)
builder.Services.AddDbContext<UserDb>(options => options.UseInMemoryDatabase("MyDatabase"));使用 SQLite 数据库
- 安装 Microsoft.EntityFrameworkCore.Sqlite
sh
$ dotnet add package Microsoft.EntityFrameworkCore.Sqlite- 注入 DbContext
EF Core 可以使用 Program.cs 中的 AddDbContext 添加到依赖注入配置。
c#
// 获取数据库连接字符串
var connectionString = builder.Configuration.GetConnectionString("MyDatabase") ?? "Data Source=MyDatabase.db";
// 将 DbContext 添加到依赖注入配置(SQLite 数据库)
builder.Services.AddSqlite<UserDb>(connectionString);创建数据库(可选)
sh
$ dotnet tool install --global dotnet-ef
$ dotnet add package Microsoft.EntityFrameworkCore.Design
$ dotnet ef migrations add InitialCreate
$ dotnet ef database update在最小 API 中使用 EF Core
返回项列表
c#
// 返回项列表
app.MapGet("/users", async (UserDb db) => await db.Users.ToListAsync());创建新项
c#
// 创建新项
app.MapPost("/user", async (UserDb db, User user) =>
{
await db.Users.AddAsync(user);
await db.SaveChangesAsync();
return Results.Created($"/user/{user.Id}", user);
});获取单个项
c#
// 获取单个项
app.MapGet("/user/{id}", async (UserDb db, int id) => await db.Users.FindAsync(id));更新单个项
c#
// 更新单个项
app.MapPut("/user/{id}", async (UserDb db, User updateUser, int id) =>
{
var user = await db.Users.FindAsync(id);
if (user is null)
{
return Results.NotFound();
}
user.Name = updateUser.Name;
user.Age = updateUser.Age;
await db.SaveChangesAsync();
return Results.NoContent();
});删除单个项
c#
// 删除单个项
app.MapDelete("/user/{id}", async (UserDb db, int id) =>
{
var user = await db.Users.FindAsync(id);
if (user is null)
{
return Results.NotFound();
}
db.Users.Remove(user);
await db.SaveChangesAsync();
return Results.Ok();
});