
深入解析API网关策略:认证、授权、安全、流量处理与可观测性
Entity Framework Core(EF Core)是 .NET 平台上最流行的 ORM 框架,省去绝大多数手写 SQL 的烦恼。只需少量配置,即可实现模型与数据库的双向映射与 CRUD 操作。
PokemonReview
并确认,即完成数据库创建。将此字符串粘入 appsettings.json
中:
{
"ConnectionStrings": {
"DefaultConnection": " < Your_Connection_String_Here > "
}
}
此法避免繁琐手动拼接,几秒即可拿到正确格式。
在 VS Code 的 NuGet Package Manager 中,搜索并安装:
Microsoft.EntityFrameworkCore.SqlServer
(核心数据库提供者)Microsoft.EntityFrameworkCore.Design
(设计时支持)确保选用 Latest Stable 版本,并在 .csproj
中见到对应 < PackageReference >
条目。
DataContext
并注册实体集合新建 Data/DataContext.cs
,继承自 DbContext
:
public class DataContext : DbContext
{
public DataContext(DbContextOptions < DataContext > options)
: base(options) { }
public DbSet < Pokemon > Pokemons { get; set; }
public DbSet < Owner > Owners { get; set; }
public DbSet < PokemonOwner > PokemonOwners { get; set; }
/* … 其他 DbSet … */
}
DbSet < T >
属性名称应 “复数” 以符合 EF 约定。OnModelCreating
配置多对多关系protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Pokemon ←→ Category 多对多
modelBuilder.Entity < PokemonCategory > ()
.HasKey(pc = > new { pc.PokemonId, pc.CategoryId });
modelBuilder.Entity < PokemonCategory > ()
.HasOne(pc = > pc.Pokemon)
.WithMany(p = > p.PokemonCategories)
.HasForeignKey(pc = > pc.PokemonId);
modelBuilder.Entity < PokemonCategory > ()
.HasOne(pc = > pc.Category)
.WithMany(c = > c.PokemonCategories)
.HasForeignKey(pc = > pc.CategoryId);
// 同理配置 PokemonOwner 多对多...
}
通过 Fluent API 明确声明联合主键与双向导航,使 EF Core 正确生成中间表。
Program.cs
注册 DbContext
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext < DataContext > (options = >
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection")));
将 DataContext
注入 DI 容器,即可在控制器、仓储中通过构造注入使用。
在 Package Manager Console 或 CLI 中运行:
dotnet ef migrations add InitialCreate
dotnet ef database update
add
生成迁移代码;update
将表结构同步到 SQL Server。SeedService.cs
,编写 SeedDataAsync(DataContext ctx)
,往 DbContext
中添加初始实体并调用 SaveChangesAsync()
。在 Program.cs
注入并调用:
builder.Services.AddTransient < SeedService > ();
var app = builder.Build();
await app.Services.GetRequiredService < SeedService > ().SeedDataAsync();
dotnet run
,检查数据库中是否已有示例数据。DbContext
→ 配置关系 → 注册 DI → 执行 Migrations → Seed。原文引自YouTube视频:https://www.youtube.com/watch?v=EmV_IBYIlyo