5

Wenn ich eine User Klasse, die diese Eigenschaften hat:EF-Code Zuerst Karte zwei Navigationseigenschaften auf den gleichen Objekttyp

public Guid UserPreferenceId { get; set; } 
    public virtual DefaultUserPreference UserPreference { get; set; } 

    public Guid SecondaryUserPreferenceId { get; set; } 
    public virtual DefaultUserPreference SecondaryUserPreference { get; set; } 

Wie kann ich dies über fließend API zu machen? Wenn ich versuche, dies auszuführen, heißt es:

Einführung der FOREIGN KEY Einschränkung für die Tabelle 'Benutzer' kann Zyklen oder mehrere Kaskadenpfade verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen. Constraint konnte nicht erstellt werden. Siehe vorherige Fehler.

Ich habe ein paar dieser Fragen gesehen, aber sie beinhalten immer eine einzige Navigationseigenschaft und eine Sammlung. Auch die Beziehung ist unidirektional, aber es könnte bidirektional sein, wenn es sein müsste, nicht sicher, ob das wichtig ist.

Antwort

5

Entity Framework erstellt standardmäßig Beziehungen mit Cascade Delete. Das Erstellen von zwei Beziehungen von einer Entität zu einer anderen Art versucht, zwei Kaskaden-Lösch-Beziehungen zu erstellen, für die die Datenbank den Fehler liefert, den Sie gesehen haben.

Verwenden Sie den Code-First Fluent Konfiguration der Cascade Löschen auf einem oder beiden der Beziehungen zu entfernen:

modelBuilder.Entity<User>() 
    .HasOptional(u => u.UserPreference) 
    .WithMany() 
    .WillCascadeOnDelete(false); 
modelBuilder.Entity<User>() 
    .HasOptional(u => u.SecondaryUserPreference) 
    .WithMany() 
    .WillCascadeOnDelete(false); 
+0

Okay, so habe ich es bidirektionale dann machen? – SventoryMang

+0

Nein, aktualisiert die Antwort mit einer, die ohne bidirektionale funktioniert. Sie müssen nur die fließende Konfigurationszeile ändern, damit sie Ihren Wünschen entspricht. – Richard

+0

Das hat Folgendes verursacht: Die Multiplizität steht in Konflikt mit der referenziellen Einschränkung in der Rolle 'DefaultUser_DefaultUserPreference_Target' in der Beziehung 'DefaultUser_DefaultUserPreference'. Da für alle Eigenschaften in der abhängigen Rolle kein Nullwert zulässig ist, muss die Multiplizität der Hauptrolle "1" sein. Es hat "funktioniert" (kein Fehler), wenn ich es bidirektional gemacht habe, aber die SecondaryUserPreferenceId wurde nicht auf einen FK-Schlüssel gesetzt. – SventoryMang

Verwandte Themen