23

Ich lese eine ganze Reihe von Posts von Programmierern, die in der Unable eine gültige Bestellung für abhängige Operationen zu bestimmen. Abhängigkeiten können aufgrund von Fremdschlüsseleinschränkungen, Modellanforderungen oder vom Speicher generierten Werten bestehen -exception wenn eine selbstverweisende Beziehung in Entity Framework verwendet wird.Selbstreferenzierung/Eltern-Kind-Beziehung in Entity Framework

Ich versuche, eine Eltern-Kind-Beziehung zu erhalten zu arbeiten:

public class Category { 
    public int CategoryId { get; set; } 
    public string Name { get; set; } 
    public int ParentId { get; set; } 
    public Category Parent { get; set; } 
    public List<Category> Children { get; set; } 
} 

Dies ist die Konfiguration I (Fluent API) verwenden:

Property(c => c.ParentId).IsOptional(); 
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId); 
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId); 

Sowohl die HasMany() und HasOptional () Konfigurationen führen zu der Ausnahme, dass eine gültige Bestellung für abhängige Vorgänge nicht ermittelt werden kann, wenn ich versuche, eine neue Kategorie wie die folgende zu speichern:

context.Categories.Add(new Category { Name = "test" }); 

Ich verstehe nicht, warum EF die Kategorie mit einer Null ParentId nicht einfügt. Die Datenbank ermöglicht, dass der ParentId-Fremdschlüssel null ist.

Können Sie mir sagen, wie das geht?

Antwort

28

Sie müssen die ParentId in der Kategorie Klasse definieren, wie NULL-Werte zulässt, um es als Fremdschlüssel Eigenschaft für eine optional Beziehung:

public int? ParentId { get; set; } 

Eine int Eigenschaft kann den Wert nicht nehmen null und daher keine darstellen kann NULL als Wert in einer Datenbankspalte.

+0

Danke! Das hat funktioniert. – Julius

+0

+1 an euch beide, du hast meinen Tag gemacht. Thax viel. –

+0

Gibt es eine Möglichkeit, diese Eltern-Kind-Beziehung mit Attributen (fließend) zu implementieren? – Shimmy