2011-07-05 2 views
3

J'ai cherché une solution et je ne trouve pas de bonnes informations. Une grande partie de la documentation EF est très obsolète. Voici mon problème.Entity Framework: Dépendances dues à des contraintes de clé étrangère

Si j'ajoute un enfant à un parent via la propriété de navigation ParentID, tout fonctionne correctement.

Si j'ajoute un enfant à un parent via la liste des enfants et l'enfant est pré-existante, je reçois cette exception:

DbUpdateException: Impossible de déterminer un ordre valide pour les opérations à charge. Des dépendances peuvent exister en raison des contraintes de clé étrangère, des exigences du modèle ou des valeurs générées en mémoire.

Si j'ajoute un enfant à un parent via la liste des enfants et l'enfant est nouveau (doit également être persisté), je reçois cette exception:

DbUpdateConcurrencyException: mise à jour magasin , insérer, ou supprimer l'instruction affecté un nombre inattendu de lignes (0). Les entités peuvent avoir été modifiées ou supprimées depuis le chargement des entités. Actualise les entrées ObjectStateManager.

Node.cs

public class Node 
{ 
    public long ID { get; private set; } 
    public long? ParentID { get; set; } 
    public List<Node> Children { get; set; } 
} 

__gVirt_NP_NNS_NNPS<__ DbContext.cs pertinentes

protected override void OnModelCreating(DbModelBuilder mb) 
{ 
    mb.Entity<Node>() 
    .HasMany(c => c.Children) 
    .WithOptional() 
    .HasForeignKey(c => c.ParentID); 
} 

Répondre

0

Avez-vous essayé de faire votre propriété Enfants

public virtual ICollection<Node> au lieu d'un List<Node>

+0

Je ne veux pas de proxies dynamiques. Je vais essayer de marquer avec des proxies virtuels et de désactiver, mais je ne pense pas que cela aidera. Ce n'est pas un problème de chargement paresseux ou quoi que ce soit (pour autant que je sache, je suppose). Je vais devoir mettre à jour demain. – OpticalDelusion

0

j'avais le même problème, je ne sais pas quelle est la meilleure solution, mais j'ai essayé d'appeler SaveChanges. context.SaveChanges(), puis Ajouter l'enfant à l'entité nouvellement créée et cela a fonctionné.

Questions connexes