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

时间:2016-11-07 06:52:42

标签: entity-framework entity-framework-core

在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);

我已经完成了the official docs,但我仍然对.IsRequired()对我的案例的调用感到困惑,因为我在Page实体中没有/需要外键

需要.IsRequired()吗?

我假设:

  • 指的是关系的“子”/依赖结束,即Page
  • 如果包含在Book:Pages = 1:0..n
  • 如果不是那么Book:Pages = 0..1:0..n

1 个答案:

答案 0 :(得分:2)

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

因此,您的问题的答案是肯定的,在您的方案中需要它。