EF 7: la dichiarazione INSERT è in conflitto con la TABELLA SAME ESTERA CHIAVE

asp.net-mvc c# entity-framework entity-framework-core sql-server

Domanda

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 ?

Risposta accettata

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.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché