在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操作,以确保在删除图书时删除依赖项。
所以你的问题的答案是肯定的,在你的场景中是需要的。