Entity Framework 7 inserts en cascade

entity-framework-core

Question

Nous venons de fusionner EF7 à partir de EF6, car nous utilisons ASP.Net 5 dans notre application. Le projet vient juste de commencer, nous ne rencontrons donc pas de problème de publication de code dépendant de bibliothèques bêta.

Nous avons rencontré un problème avec les insertions en cascade. Par insertion en cascade, je veux dire qu'une collection d'entités enfants est insérée / mise à jour avec le parent. Cela semble dépendre de l'ordre des opérations de manière surprenante.

Étant donné les définitions suivantes:

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

le code suivant fonctionne (ChildTable est rempli avec 3 valeurs):

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

Mais ce qui suit ne le fait pas (ChildTable reste vide):

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

Pour que le travail ci-dessous fonctionne, je dois effectuer les tâches suivantes:

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

Quelqu'un peut-il expliquer pourquoi il y a une telle différence? En EF6, cela fonctionne comme je l’attendais. Je comprendrais s'il n'y avait pas encore de support dans EF7 pour les entités enfant automatiquement suivies, mais vous pouvez évidemment le faire fonctionner si vous déplacez l'appel Set.Add. Il est encore plus surprenant pour moi que le fait de déplacer l'appel Set.Add plus tard lorsque la collection enfant est remplie est ce qui fonctionne.

Des idées / explications?

Nous utilisons EF7 beta 7.

Réponse populaire

Nous travaillons activement pour que cela se comporte comme prévu. Pour nos dernières réflexions, veuillez consulter nos notes de la réunion de conception du 27 août 2015 .



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi