使用IsRequired()在EF Core中配置1:n关系



在EF Core中,许多api都发生了变化,所以我很困惑如何正确配置我的关系。

假设一个Book有多个Page,并且一个Page必须是一个Book的一部分(它不能单独存在)。

builder.Entity<Book>()
  .HasMany(e => e.Pages)
  .WithOne(e => e.Book)
  //.IsRequired()                           // is this, erm, required?
  .OnDelete(DeleteBehavior.Cascade);

我已经阅读了官方文档,但我仍然对.IsRequired()调用感到困惑,因为我没有/需要Page实体中的外键。

是否需要.IsRequired() ?

我认为:

  • 表示关系的"子"/依赖端,即Page
  • 如果包含,则Book:Pages = 1:0..n
  • 如果没有,则Book:Pages = 0..1:0..n

如果您没有在Page类中包含外键属性,EF将创建一个可空的阴影外键属性,其级联动作为NO action。如果您希望将结果BookId列配置为非空,则必须使用Required方法来覆盖它,并且您还需要指定Cascade操作,以确保在删除图书时删除依赖项。

所以你的问题的答案是肯定的,在你的场景中是需要的。

最新更新