23

Czytam dość wiele postów programistów, którzy działają na Nie można ustalić prawidłowej kolejności dla operacji zależnych. Zależności mogą istnieć z powodu ograniczeń klucza obcego, wymagań modelu lub wygenerowanych w sklepie wartości - wyjątek podczas korzystania z relacji odwołującej się w Entity Framework.Relacja własna/relacja rodzic-dziecko w Entity Framework

Próbuję uzyskać relację rodzic-dziecko do pracy:

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; } 
} 

Jest to konfiguracja używam (Fluent API):

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); 

Zarówno hasMany() i HasOptional () w wyniku konfiguracji "Nie można określić prawidłowego zamówienia dla operacji zależnych ...", gdy próbuję zapisać nową kategorię:

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

Nie rozumiem, dlaczego EF nie wstawia kategorii z pustym identyfikatorem nadrzędnym. Baza danych umożliwia zerowy klucz obcy ParentId.

Czy możesz mi powiedzieć, jak to zrobić?

Odpowiedz

28

Musisz określić ParentId w klasie jako wartości pustych kategorii, aby wykorzystać ją jako własność klucza obcego dla opcjonalnie relacji:

public int? ParentId { get; set; } 

Własność int nie może przyjmować wartości null, a zatem nie może stanowić NULL jako wartość w kolumnie bazy danych.

+0

Dzięki! To się udało. – Julius

+0

+1 do was obojga, zrobiliście mój dzień. Thax dużo. –

+0

Czy istnieje sposób na wdrożenie tej relacji rodzic-dzieci z atrybutami (płynnymi)? – Shimmy