ASP.NET Core Web API 多对多关系实战:POCO、Join Entity 与导航属性全解析
作者:xiaoxin.gao · 2025-06-27 · 阅读时间:3分钟
ASP.NET Core 多对多关系
EF Core Join 表 实践
EF Core 导航属性 ICollection 用法
PokemonOwner PokemonCategory Join Entity
UML 类图 多对多 可视化
Web API N:N 关联
引言:什么是多对多关系? 多对多关系(N\:N)指的是两个实体之间可以互相关联多条记录,如学生与课程、Poke […]
文章目录
引言:什么是多对多关系?
多对多关系(N\:N)指的是两个实体之间可以互相关联多条记录,如学生与课程、Pokemon 与 Owner 互为多对多。实现此关系需借助Join 实体(关联表),本文基于 Pokémon 示例详解实现过程。
一、在 UML 图中识别 N\:N 关系

- 打开 UML 类图,寻找两个实体之间都标记为 “*”(Many)的关联。
- 如示例图中:
Pokemon──Owner与Pokemon──Category,都需通过中间表实现。
二、创建 Join 表实体(关联表)

-
在
Models内新增PokemonOwner.cs:public class PokemonOwner { public int PokemonId { get; set; } public Pokemon Pokemon { get; set; } public int OwnerId { get; set; } public Owner Owner { get; set; } } -
同理创建
PokemonCategory.cs:public class PokemonCategory { public int PokemonId { get; set; } public Pokemon Pokemon { get; set; } public int CategoryId { get; set; } public Category Category { get; set; } }Join 表同时持有两个外键和对应导航属性,用于存储多对多关系。
三、在实体中添加集合导航属性(“一”端)
-
Pokemon 类新增:
public ICollection < PokemonOwner > PokemonOwners { get; set; } public ICollection < PokemonCategory > PokemonCategories { get; set; } -
Owner 类新增:
public ICollection < PokemonOwner > PokemonOwners { get; set; } -
Category 类新增:
public ICollection < PokemonCategory > PokemonCategories { get; set; }通过集合导航属性,EF Core 可识别并查询关联数据。
四、在 Join 实体中反向添加导航属性(“多”端)

- PokemonOwner 与 PokemonCategory 已在定义时包含双向导航,便于从关联表访问双方实体。
- 确保所有外键字段类型与主实体主键一致,避免类型不匹配。
五、验证模型完整性与调试小技巧
- 手动检查各实体及 Join 实体中的数据类型和属性名称,避免拼写或类型错误。
- 在 VS Code 中,使用右键 Go to Definition 快速跳转查看实体定义,提升开发效率。
小结与下一步
- 多对多关系 通过显式创建Join 实体来保存关联,集合导航属性可让 EF Core 自动识别。
- 确保在主实体和 Join 实体中正确添加外键与导航属性。
- 下一章将演示如何在 DbContext 中配置 Fluent API,自动维护中间表,并实现多对多数据的增删查改。
通过本篇,您已掌握手动构建 N\:N 关系的核心步骤,为更复杂的数据模型打下坚实基础。
原文引自YouTube视频:https://www.youtube.com/watch?v=oOUSvRc3FMo
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
最新文章
- WordPress: 从博客平台到AI驱动的内容管理巨人
- 2025 Mono 数据增强 API 使用指南|交易洞察与客户个性化服务实践
- Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
- 通过 Python 集成 英语名言 API 打造每日激励小工具,轻松获取每日名言
- 来自 openFDA、DailyMed、RxNorm、GoodRx、DrugBank、First Databank 等的药物和药物数据 API
- API设计:从基础到最佳实践
- 实战 | Python 实现 AI 语音合成技术
- Snyk Learn 全新 API 安全学习路径:掌握 OWASP API 前十风险与防护策略
- Document Picture-in-Picture API 实战指南:在浏览器中实现浮动聊天窗口
- 什么是变更数据捕获?
- AI 推理(Reasoning AI):构建智能决策新时代的引擎
- Python应用 | 网易云音乐热评API获取教程