120 messaggi dal 24 febbraio 2006
Ciao a tutti,
ho un oggeto (es. Ordine) caricato con entityframework (detached dal suo originale context) che risalvo dopo averlo popolato con dei dati raccolti da una form (facendo un attach ad un context)
Tutto funzionava correttamente.
Questo oggetto ha ora una entità collegata (es. Riga) di cui posseggo l'id.
Carico l'oggetto tramite l'id da una classe che usa il suo Context e lo associo all'oggetto padre (prima di averlo salvato), es:

...
Ordine.Data = ...;
Ordine.Riga = RigaEF.load(idRiga);
....

Sull'ultima assegnazione mi da questa eccezione:

"Impossibile definire la relazione tra i due oggetti perché sono connessi a oggetti ObjectContext diversi."

Il messaggio è chiaro..ma come faccio ad aggirare il problema?
Io chiaramente non ho più accesso al vecchio context, c'è un'altra strada??
Ciao grazie

Frederick@CityOfCastle
Dovresti effettuare il detach della riga oppure caricare l'oggetto con il tracking disabilitato.

m.
120 messaggi dal 24 febbraio 2006
Se faccio il detach di Riga quando vado a fare l'operazione incriminata mi da questa eccezione al posto della precedente

"Impossibile aggiungere l'oggetto a ObjectStateManager perché include già un elemento EntityKey. Utilizzare ObjectContext.Attach per connettere un oggetto che dispone di una chiave esistente"

Ha funzionato invece disabilitando il tracking dell'Ordine,
grazie
ciao

Frederick@CityOfCastle
120 messaggi dal 24 febbraio 2006
No scusa preciso...
applicando sia il detach dell'oggetto Riga dal proprio contesto, sia disabilitando il Tracking per l'oggetto Ordine NON DA ERRORE.
Ma ho poi verificato che NON SALVA il riferimento alla riga (ossia nel DB non trovo il campo Ordine.idRiga valorizzato)

L'unica peculiarità è che l'oggetto Ordine, siccome detached lo riaggancio al nuovo contesto di salvataggio tramite una routine che avevo preso dal sito MS:

EntityKey key; object originalItem;
// Create the detached object's entity key.
key = context.CreateEntityKey(entityName, obj);

// Get the original item based on the entity key from the context
if (context.TryGetObjectByKey(key, out originalItem))
// Call the ApplyPropertyChanges method to apply changes
// from the updated item to the original version.
context.ApplyPropertyChanges(key.EntitySetName, obj);
//
context.SaveChanges();

Come ne esco?
Ciao grazie

Frederick@CityOfCastle

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.