2016-11-07 2 views
1

In EF Core haben sich viele APIs geändert, daher bin ich verwirrt, wie ich meine Beziehungen richtig konfiguriere.Konfigurieren einer 1: n-Beziehung in EF Core mit IsRequired()

Angenommen, ein Book hat viele Page s, und ein Page muss Teil eines sein Book (es kann nicht für sich allein existieren).

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

Ich habe durch the official docs gegangen, aber ich bin immer noch verwirrt über den .IsRequired() Ruf nach meinem Fall, da ich keinen Fremdschlüssel in der Page Einheit habe/müssen.

Wird .IsRequired() benötigt?

Ich gehe davon aus:

  • es bezieht sich auf das "Kind"/abhängiges Ende der Beziehung, dh Page
  • enthält, wenn dann Book:Pages = 1:0..n
  • wenn nicht, dann Book:Pages = 0..1:0..n

Antwort

2

Wenn Sie keine Fremdschlüsseleigenschaft in die Page-Klasse aufnehmen, erstellt EF eine Nullable-Shadow-Fremdschlüsseleigenschaft y, mit einer Kaskadenwirkung von NO ACTION. Sie müssen die Required-Methode verwenden, um das zu überschreiben, wenn die resultierende BookId-Spalte als nicht null konfiguriert werden soll. Außerdem müssen Sie die Cascade-Aktion so festlegen, dass Abhängigkeiten gelöscht werden, wenn das Buch gelöscht wird.

Also die Antwort auf Ihre Fragen ist ja, es ist in Ihrem Szenario erforderlich.

+0

Macht Sinn, danke. – grokky