Entity Framework 7 inserti a cascata

entity-framework-core

Domanda

Abbiamo appena fatto una fusione con EF7 di EF6, poiché utilizziamo ASP.Net 5 nella nostra applicazione. Il progetto è appena iniziato, quindi non ci imbatteremo in problemi con il rilascio del codice dipendente dalle librerie beta.

Abbiamo riscontrato un problema con gli inserti a cascata. Con gli inserimenti a cascata intendo che una raccolta di entità figlio viene inserita / aggiornata con il genitore. Sembra dipendere dall'ordine delle operazioni in modo sorprendente.

Date le seguenti definizioni:

public class ParentEntity
{
    public int Id { get; set; }
    public ICollection<ChildEntity> Children { get; set; }
}

public class ChildEntity
{
    public int Id { get;set; }

    public ParentEntity Parent { get; set; }
}

il seguente codice funziona (ChildTable è popolato con 3 valori):

var parent = new ParentEntity();            

parentSet.Add(parent);

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
}

_uow.SaveChanges();

Ma quanto segue non (ChildTable rimane vuoto):

var parent = new ParentEntity();                

// Moved parentSet.Add()

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
}

parentSet.Add(parent);

_uow.SaveChanges();

Per rendere il seguito funziona, devo fare quanto segue:

var parent = new ParentEntity();                

parent.Children = new List<ChildEntity>();

for (int i = 0; i < 3; i++)
{
    var child= new ChildEntity { Parent = parent };
    parent.Children.Add(child);
    childSet.Add(child); // Added childSet.Add()
}

parentSet.Add(parent);

_uow.SaveChanges();

Qualcuno può spiegare perché c'è una tale differenza? In EF6, funziona come mi aspetto. Capirei se non ci fosse ancora supporto in EF7 per le entità figlio tracciate automaticamente, ma ovviamente puoi farlo funzionare se sposti la chiamata Set.Add. È ancora più sorprendente per me che spostare la chiamata Set.Add in anticipo quando viene compilata la raccolta secondaria è ciò che funziona.

Qualche idea / spiegazione?

Utilizziamo EF7 beta 7.

Risposta popolare

Stiamo lavorando attivamente per rendere questo comportamento come previsto. Per le nostre ultime riflessioni, consulta le nostre note sulla riunione di design del 27 agosto 2015 .




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é