23

Ho letto un buon numero di post di programmatori che vengono eseguiti nello Impossibile determinare un ordine valido per le operazioni dipendenti. Le dipendenze possono esistere a causa di vincoli di chiavi estranee, requisiti del modello o valori generati dallo store eccetto quando si utilizza una relazione autoreferenziale in Entity Framework.Relazione autoreferenziale/genitore-figlio in Entity Framework

Sto cercando di ottenere una relazione padre-figlio a lavorare:

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

Questa è la configurazione che uso (API perfetto):

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

Sia la hasMany() e HasOptional () le configurazioni generano un'eccezione "Impossibile determinare un ordine valido per le operazioni dipendenti ..." quando provo a salvare una nuova categoria come questa:

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

Non capisco perché EF non inserisca la Category con un parentId nullo. Il database consente alla chiave esterna ParentId di essere nullo.

Sareste in grado di dirmi come si fa?

risposta

28

È necessario definire la ParentId nella classe categoria annullabile per usarlo come la proprietà chiave esterna di una relazione opzionale:

public int? ParentId { get; set; } 

Una proprietà int non può prendere il valore null e quindi non può rappresentare un NULL come valore in una colonna del database.

+0

Grazie! Ha funzionato. – Julius

+0

+1 a tutti e due, hai reso la mia giornata. Thax molto. –

+0

Esiste un modo per implementare questa relazione genitore-figlio con gli attributi (fluente)? – Shimmy

Problemi correlati