16 messaggi dal 21 maggio 2007
Ciao a tutti

Ho un problema che mi preoccupa su cui sto sbattendo la testa da un po di tempo che riguarda le navigation property di Entity Framework.

In sostanza: ho una classe con un metodo per il salvataggio delle modifiche applicate ad un Customer. La mia entity Customer ha una navigation property chiamata ModificationUser di tipo User. All'interno della mia classe ho un dataContext unico ed ho una istanza di User attached a quel dataContext. Anche il Customer in questione appartiene a quel dataContext, ed è in stato modified.

Arrivo quindi al problema: quando assegno al customer lo user viene generata un eccezione che proprio non riesco a capire.

Questo codice:
...
MyCustomer.ModificationUser = MyUser;
...


Genera questa eccezione:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.


Ho provato anche ad esaminare il contenuto di ObjectStateManager a runtime prima dell'assegnazione, ma non vi ho trovato nulla che mi facesse risalire allo user.

Tenete conto che il problema si ripropone anche per le altre Navigation Property (se aggiungo il customer ai customer associati allo user, se imposto la Currency al customer e così via...)

Qualcuno ha qualche idea?

Grazie mille

Matteo
Questo codice:

...
MyCustomer.ModificationUser = MyUser;
..


Genera questa eccezione:

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
Verifica che l'associazione tra le entità sia di tipo "many to one"

.A
Improove - http://lets.improove.tech
16 messaggi dal 21 maggio 2007
La relazione si è di tipo ManyToOne.

Rileggendo il post mi sono reso conto di non aver detto tutta la verita

In sostanza sia MyCustomer che MyUser mi arrivano direttamente dal client passando per uno strato di servizi. Entrambi sono inizialmente Detached, per ovvi motivi. Il metodo che si occupa di eseguire l'Update si occupa di eseguire l'attach delle due Entity al nuovo ObjectContext e poi ci lavora sopra.

Un ultima cosa: MyCustomer ha già impostato uno User che guarda caso è proprio quello che sto cercando di riassegnargli. Lo user non è però caricato, ovvero è presente solo la EntityReference. Potrebbe essere questo ad incartarlo? Ammetto che non ho fatto ancora un test con user diversi

Ciao!
Matteo
25 messaggi dal 07 febbraio 2005
Una domanda.

La relazione esisteva già nel database quando hai creato l'EDM?

Hai per caso seguito quindi questi passi:
- creazione dell'EDM a partire dal database (senza relazione nell'EDM)
- aggiunta a MANO della associazione sull'EDM

?

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.