J'ai une entité (je suis en utilisant le premier code) qui ressemble à ce que:Entity Framework liste chaînée
public class Node
{
public int ID { get; set; }
public string SomeInfo { get; set; }
public virtual Node Previous { get; set; }
public virtual Node Next { get; set; }
}
Il n'y a pas de problème pour enregistrer le nœud suivant par exemple. Cependant, si l'ID de Previous est 1 et que j'essaie de définir le Next Node (qui est celui avec ID = 1) sur 2, cette exception est levée.
L'objet ne peut pas être ajouté au contexte de l'objet. L'objet EntityKey a un ObjectStateEntry qui indique que l'objet est participant déjà à une relation différente.
Je sauve le nœud comme ceci:
int nextId;
int previousId;
if (int.TryParse(Request["previous"], out previousId))
node.Previous = this.nodeRepository.GetSingle(previousId);
if (int.TryParse(Request["next"], out nextId))
node.Next = this.nodeRepository.GetSingle(nextId);
this.nodeRepository.Update(node);
Mise à jour ressemble à ceci:
public virtual void Update(T entity)
{
this.context.Entry(GetSingle(entity.ID)).State = EntityState.Detached;
this.context.Entry(entity).State = EntityState.Added;
this.context.Entry(entity).State = EntityState.Modified;
this.Save();
}
Et GetSingle comme ceci:
public virtual T GetSingle(object id)
{
var query = this.entities.Find(id);
return query;
}
MISE À JOUR 1
La ligne à l'exception est dans la méthode de mise à jour:
this.context.Entry(entity).State = EntityState.Modified;
Je crois que le problème est dans celui-à-un. EF prend uniquement en charge partagée des associations de clé primaire dans ce cas, ce qui signifie essentiellement que si 'Node.ID =' 1' puis Noeud .Previous.ID' et 'Node.Next.ID' doivent aussi être' 1' Aucune autre valeur n'est possible Vous ne pouvez créer une boucle que depuis un noeud vers lui-même, pour ainsi dire. exception? Et quelles valeurs ont 'node.ID',' previousId' et 'nextId' quand vous obtenez l'exception? – Slauma
En fait, cela ne semble pas être le problème. Le scénario est comme ceci: node.id = 2; node.previous.id = 1. Maintenant je vais à node.id = 1 et essaye de mettre node.next.id = 2 - seulement alors l'exception est levée. – Unknown
Avez-vous un mappage avec l'API Fluent (ou des annotations de données)? Pour moi, le modèle ne peut pas être créé, je suis incapable de déterminer l'exception de fin d'association principale. Quelle version EF utilisez-vous? – Slauma