在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
答案 0 :(得分:2)
如果在Page
类中没有包含外键属性,EF将创建一个可以为空的shadow外键属性,其级联操作为NO ACTION。如果希望将生成的Required
列配置为非null,则必须使用BookId
方法覆盖该方法,并且还需要指定Cascade操作,以确保依赖项删除图书时删除。
因此,您的问题的答案是肯定的,在您的方案中需要它。