collegata ho un'entità (sto usando il codice prima) che assomiglia a quello: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; }
}
Non c'è nessun problema di salvare il nodo successivo, per esempio. Tuttavia se l'ID di Previous è 1 e provo ad impostare il Next Node (che è quello con ID = 1) a 2 questa eccezione viene lanciata.
L'oggetto non può essere aggiunto al contesto dell'oggetto. L'oggetto EntityKey ha un oggetto ObjectStateEntry che indica che l'oggetto è già partecipante a una relazione diversa.
Mi risparmio il nodo in questo modo:
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);
aggiornamento si presenta così:
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();
}
E GetSingle come questo:
public virtual T GetSingle(object id)
{
var query = this.entities.Find(id);
return query;
}
UPDATE 1
La linea con l'eccezione è nel metodo di aggiornamento:
this.context.Entry(entity).State = EntityState.Modified;
credo che il problema è nel rapporto. EF one-to-one supporta solo condiviso le associazioni di chiave primaria in questo caso che in pratica significa che se 'Node.ID = 1' poi' nodo .Previous.ID' e 'Node.Next.ID' devono anche essere' 1'. Nessun altro valore è possibile.Può solo creare un loop da un nodo a se stesso, per così dire. eccezione? E quali valori hanno 'node.ID',' previousId' e 'nextId' quando ottieni l'eccezione? – Slauma
In realtà questo non sembra essere il problema. Lo scenario è simile a: node.id = 2; node.previous.id = 1. Ora vado su node.id = 1 e provo a impostare node.next.id = 2 - solo allora viene lanciata l'eccezione. – Unknown
Avete qualche mappatura con Fluent API (o annotazioni di dati)? Per me il modello non può essere creato, ottengo l'eccezione "impossibile determinare l'estremità principale dell'associazione". Quale versione EF stai usando? – Slauma