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大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- Python调用免费翻译API实现Excel文件批量翻译
- 为开源项目 go-gin-api 增加 WebSocket 模块
- AI编程的风险,如何毁掉你的 API?
- 使用预约调度API的运输管理
- Claude 免费用户频繁被限流?实用应对策略推荐
- 如何获取谷歌新闻 API Key 密钥(分步指南)
- API 目录 – 什么是 API 目录?
- 用NestJS和Prisma: Authentication构建一个REST API
- DeepSeek – Anakin.ai 的 Reason 模型 API 价格是多少?
- 19个API安全最佳实践,助您实现安全
- 如何免费调用Kimi API实现项目集成
- 探索 Zomato API 的潜力