WithOne和WithMany的本质区别在于描述同一关系的两个方向:WithOne用于“一”端,表示对方有一个我;WithMany用于“多”端,表示对方有多个我,须与HasOne/HasMany联用构成HasXXX().WithXXX()模式。

这两个方法不是独立使用的,必须和 HasOne 或 HasMany 搭配,组成“HasXXX().WithXXX()”固定模式。它们描述的是**同一段关系的两个方向**:
比如文章(Article)和评论(Comment)是一对多关系:
HasOne(c => c.Article).WithMany(a => a.Comments)
HasMany(a => a.Comments).WithOne(c => c.Article)
导航属性是实体类里用来“跳转到关联对象”的属性,必须和 Fluent API 配置保持逻辑一致:
public Comment? TopComment { get; set; } 或 public Article? Article { get; set; }
public List<comment> Comments { get; set; } = new();</comment>
.WithMany()
EF Core 不强制要求双向,但双向更利于查询和维护。
EF Core 默认会在“多”端表中生成外键列(如 ArticleId),前提是没手动干预。是否显式声明取决于需求:
public int? ArticleId { get; set; },再用 HasForeignKey(c => c.ArticleId)
ArticleId
一对多关系的 Fluent API 配置可以放在任一端,但推荐写在“多”端的配置类里:
CommentConfig 里示例(推荐写法):
builder.Entity
.HasOne(c => c.Article)
.WithMany(a => a.Comments)
.HasForeignKey(c => c.ArticleId);
以上就是EF Core WithOne和WithMany怎么用 EF Core导航属性配置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号