Entity Framework 7 inserciones en cascada

entity-framework-core

Pregunta

Acabamos de hacer una fusión a EF7 desde EF6, ya que usamos ASP.Net 5 en nuestra aplicación. El proyecto acaba de iniciarse, por lo que no tendremos problemas con el lanzamiento de código dependiente de las bibliotecas beta.

Nos hemos encontrado con un problema con las inserciones en cascada. Por inserciones en cascada quiero decir que una colección de entidades secundarias se inserta / actualiza con el padre. Parece depender del orden de las operaciones de una manera sorprendente.

Dadas las siguientes definiciones:

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

El siguiente código funciona (ChildTable se llena con 3 valores):

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

Pero lo siguiente no (ChildTable permanece vacío):

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

Para que funcione lo siguiente, tengo que hacer lo siguiente:

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

¿Alguien puede explicar por qué hay tanta diferencia? En EF6, esto funciona como espero que lo haga. Comprendería si todavía no hubiera soporte en EF7 para entidades secundarias rastreadas automáticamente, pero obviamente puede hacer que funcione si mueve la llamada Set.Add. Lo que me sorprende aún más es que lo que funciona es mover la llamada Set.Add antes de que se complete la recopilación secundaria.

¿Alguna idea / explicaciones?

Utilizamos EF7 beta 7.

Respuesta popular

Estamos trabajando activamente para que esto se comporte como se espera. Para conocer nuestras últimas ideas, consulte nuestras Notas de la reunión de diseño del 27 de agosto de 2015 .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué