2016-11-07 113 views
1

在EF内核中,很多API已经改变,所以我很困惑如何正确配置我的关系。使用IsRequired()在EF内核中配置1:n关系

假设一个Book有很多Page s,而一个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

回答

2

如果您在Page类中未包含外键属性,则EF将创建可空的影子外键属性y,带有NO ACTION的级联动作。如果想要将生成的BookId列配置为非空值,则必须使用Required方法覆盖该方法,并且还需要指定Cascade操作,以确保在删除书籍时删除了依赖项。

所以你的问题的答案是肯定的,它是你的情况下需要的。

+0

有道理,谢谢。 – grokky