Skip to content

结合使用 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; }
}

使用内存数据库(可选)

  1. 安装 Microsoft.EntityFrameworkCore.InMemory
sh
$ dotnet add package Microsoft.EntityFrameworkCore.InMemory
  1. 注入 DbContext

EF Core 可以使用 Program.cs 中的 AddDbContext 添加到依赖注入配置。

c#
// 将 DbContext 添加到依赖注入配置(内存数据库)
builder.Services.AddDbContext<UserDb>(options => options.UseInMemoryDatabase("MyDatabase"));

使用 SQLite 数据库

  1. 安装 Microsoft.EntityFrameworkCore.Sqlite
sh
$ dotnet add package Microsoft.EntityFrameworkCore.Sqlite
  1. 注入 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();
});

Last updated:

Released under the MIT License.