ASP.NET Core Web API 一对多关系详解:POCO、外键与实体映射

作者:xiaoxin.gao · 2025-06-27 · 阅读时间:4分钟
引言:什么是一对多关系? 在数据库设计中,一对多(1\:N)关系是最常见的关联类型:一个“主”实体可关联多条“ […]

引言:什么是一对多关系?

在数据库设计中,一对多(1\:N)关系是最常见的关联类型:一个“主”实体可关联多条“从”实体记录。核心是通过 外键(Foreign Key) 将表链接起来。
例如,Country 表中的一条记录(国家)可对应多个 Owner(训练师),它们通过 CountryId 外键关联。


一、UML 类图可视化关系

使用 UML 类图帮助梳理实体与字段,并直观标注关系:

Pokemon 1 ──── * Review
Country 1 ──── * Owner
Reviewer 1 ──── * Review
  • 1 端显示单一对象,* 端显示集合。
  • Many-to-many(N\:N)关系会额外通过中间表实现,本文下节再详解。

二、在实体中添加集合导航属性(“多”端)

1. Pokemon 与 Review

Models/Pokemon.cs 内添加:

public class Pokemon
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }

    // 一对多:一个 Pokemon 可有多条 Review
    public ICollection < Review > Reviews { get; set; }
}

2. Country 与 Owner

Models/Country.cs 内添加:

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }

    // 一对多:一个 Country 可有多名 Owner
    public ICollection < Owner > Owners { get; set; }
}

3. Reviewer 与 Review

Models/Reviewer.cs 内添加:

public class Reviewer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // 一对多:一个 Reviewer 可写多条 Review
    public ICollection < Review > Reviews { get; set; }
}

三、在实体中添加单对象导航属性(“一”端)

Owner 引用 Country

Models/Owner.cs 中添加外键与导航属性:

public class Owner
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Gym { get; set; }

    // 外键字段
    public int CountryId { get; set; }
    // 一对多:在 Owner 中持有单一 Country 对象
    public Country Country { get; set; }
}

Review 引用 Reviewer 与 Pokemon

Models/Review.cs 中添加:

public class Review
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }

    // 外键与导航属性
    public int ReviewerId { get; set; }
    public Reviewer Reviewer { get; set; }

    public int PokemonId { get; set; }
    public Pokemon Pokemon { get; set; }
}

小结与下一步

  • 一对多关系 通过在“多”端实体中声明 ICollection < T > 导航属性,以及在“单”端实体中声明对应外键与单一导航属性来实现。
  • 外键字段(如 CountryIdReviewerId)既用于数据库约束,也让 EF Core 正确映射关联。
  • 下节将演示 多对多(N\:N)关系,包括中间表(Join Entity)的配置方法。

原文引自YouTube视频:https://www.youtube.com/watch?v=DWi-VHElmRE