2012-02-06 8 views
6

Quando uso session.update (oggetto) ottengo l'errore di sotto e come posso correggere questo errore? Ho anche provato Session.evict (oggetto) ancora non è risolto per l'errore sottoun oggetto diverso con lo stesso valore identificativo era già associato alla sessione: 10, di entità: Sales.Entities.Ttable1

a different object with the same identifier value was already associated with the   session: 10, of entity: Sales.Entities.TTable 
+1

Si prega di segnare la risposta giusta! – Joel

risposta

17

è l'applicazione di un'applicazione web?

Usa Session.Merge(object)

Nelle applicazioni web a volte serializzare e de-serializzare gli oggetti, quindi non in modo da creare nuovi oggetti, quindi, anche se gli oggetti NHibernate ha lo stesso ID, il riferimento all'oggetto è diverso. Quindi si tenta di aggiornare l'oggetto de-serializzato, NHibernate rileva un altro oggetto con lo stesso ID ma un puntatore di riferimento diverso quindi non sa quale oggetto nella memoria è quello "corretto".

in questi casi viene utilizzato il metodo Merge(), quindi è possibile aggiornare gli oggetti presenti nell'applicazione Web.

4

Cosa stai cercando di realizzare, l'errore significa che stai cercando di aggiornare un oggetto che ibernazione ha già la sua cache interna ma stai inviando un riferimento a un oggetto diverso.

L'utilizzo di Session.Merge è una possibilità, ma nella maggior parte dei casi, se si è in un contesto Web, si dovrebbe già avere il riferimento da qualche parte perché molto probabilmente si utilizzerà Sessione per richiesta. Quindi la domanda è:

  • Perché hai l'oggetto che stai cercando di salvare nella cache ma non utilizzarlo?
-6

Utilizzare Session.Clear() prima di Session.Update (oggetto).

+7

Il metodo Clear sta svuotando l'unità di lavoro (se ci sono cambiamenti imprevisti, saranno scartati) e si sta comportando come se avessi chiamato 'Evict' su tutte le istanze caricate nella sessione. Stai nascondendo il problema rimuovendo il sintomo. Che male! –

Problemi correlati