EF Core 的关系映射,说穿了不是靠“照着教程抄配置”搞定的,而是由实体定义、导航属性和(必要时)显式配置这三样东西共同决定的。只要你的实体类结构写对了,6.0 以上的版本基本不用手敲 modelBuilder,一对多和纯多对多就能跑通。下面咱们拆开细聊。

C#怎么实现EF Core关系映射_C#一对多多对多关系配置教程【实战】

一对多:靠外键字段 + 导航属性自动发现

EF Core 默认就能识别一对多关系,前提是子实体里得有个明确的外键属性,并且两边都有对应的导航属性。举个例子,Post 必须有个 BlogId 字段,Blog 那边要有 ICollectionPost 这边也得有 Blog 引用——这四样凑齐了,你执行 dotnet ef migrations add 的时候,EF 就会自动生成带外键约束的表结构。

纯多对多:EF Core 6+ 隐式中间表,删干净再跑迁移

如果两个实体都只含 ICollection 导航属性,没有中间类,也没有外键字段,EF Core 6.0 以上就会自动生成一张中间表(比如 PostsTags),带复合主键,不生成额外的 ID 列。这设计很省事,但有几个坑得提前知道。

多对多带附加字段:必须用显式中间实体

一旦中间表需要存时间、状态、权重这类业务字段,隐式方式就立马失效了。你得亲手建一个中间类(比如 PostTag),然后分别配两段一对多关系。

最后说一个最常见的陷阱:隐式多对多和显式中间实体不能共存。哪怕你只残留了一个 PostTag 类,或者一个 PostTagDbSet,EF 就会拒绝生成迁移,而且错误信息往往不指向真实原因。动手前先全局 grep 一下,把相关类、DbSet 全部删干净,比反复调试要快得多。

本文转载于:https://www.php.cn/faq/2343542.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。