Ho un'eccezione quando chiamo SaveChangesAsync. La mia architettura è davvero semplice, ho una classe Category, che contiene
public class Category {
public Guid ID {get; set;}
public Guid? ParentId {get; set;}
public Category Parent {get; set;}
[...]
}
Quando voglio inserire una nuova categoria nel database (connesso alla mia applicazione ASP MVC), imposto il GUID prima di fare l'inserimento. L'errore si è verificato quando il mio database è vuoto e voglio inserire la categoria genitore (quindi con Id Guider nullo e Genitore nullo). Questo NON sta accadendo se imposto un valore genitore. Posso aggiungere un record manualmente impostando il genitore su Null da Visual Studio.
Ho il seguente errore:
L'istruzione INSERT era in conflitto con il vincolo FOREIGN KEY SAME TABLE "FK_Category_Category_ParentId". Il conflitto si è verificato nel database "HT_Root", nella tabella "dbo.Category", nella colonna "ID". La dichiarazione è stata chiusa.
Ho cercato su stack overflow per una risposta semplice, e non l'ho trovato. Provo con l'API Fluent:
modelBuilder.Entity<Category>().HasOne(s => s.Parent).WithMany().HasForeignKey(s => s.ParentId);
Ma nulla è cambiato. Che cosa sto facendo di sbagliato ?
Sembra essere cambiato in EF 7 Vedi questo problema github
Provare
public class Category
{
public Guid ID {get; set;}
public Guid? ParentId {get; set;}
public Category Parent {get; set;}
public ICollection<Categories> Children {get; set;}
}
E
modelBuilder.Entity<Category>()
.HasOne(x => x.Parent)
.WithMany(x => x.Children)
.HasForeignKey(x => x.ParentId)
.Required(false);
Si dovrebbe anche verificare sempre che (se specificato) il ParentId esista nel database. Attenzione per l'aggiunta di Guid.Empty
(00000000-0000-0000-0000-000000000000) invece di null
quanto ciò può causare problemi.