ligado Tengo una entidad (estoy usando el código primero) que se parece a lo siguiente:Entity Framework lista
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; }
}
No hay ningún problema para guardar el siguiente nodo, por ejemplo. Sin embargo, si el ID de Anterior es 1 e intento establecer el Siguiente nodo (que es el que tiene ID = 1) en 2, se lanza esta excepción.
El objeto no se puede agregar al contexto del objeto. El objeto EntityKey tiene un ObjectStateEntry que indica que el objeto es que ya participa en una relación diferente.
me ahorro el nodo de la siguiente manera:
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);
actualización es el siguiente:
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();
}
Y GetSingle así:
public virtual T GetSingle(object id)
{
var query = this.entities.Find(id);
return query;
}
ACTUALIZA 1
La línea con la excepción está en el método de actualización:
this.context.Entry(entity).State = EntityState.Modified;
creo que el problema es en la relación. EF uno-a-uno sólo admite compartida asociaciones de clave principal en este caso lo que significa básicamente que si 'Node.ID = 1' entonces' nodo .Previous.ID' y 'Node.Next.ID' también deben ser' 1'. No es posible ningún otro valor. Solo puede crear un bucle desde un nodo a sí mismo, por así decirlo. En qué línea exactamente obtiene el excepción? Y qué valores tienen 'node.ID',' previousId' y 'nextId' cuando obtiene la excepción? – Slauma
En realidad, este no parece ser el problema. El escenario es así: node.id = 2; node.previous.id = 1. Ahora voy a node.id = 1 y trato de establecer node.next.id = 2 - solo entonces se lanza la excepción. – Unknown
¿Tiene algún mapeo con Fluent API (o anotaciones de datos)? Para mí, el modelo no se puede crear, obtengo la excepción "no se puede determinar el extremo principal de la asociación". ¿Qué versión de EF estás usando? – Slauma