2011-12-02 11 views
16

Ho difficoltà capire NH eccezione:L'aggiornamento batch ha restituito il numero di righe inatteso dall'aggiornamento; conteggio effettivo delle righe: 0; attesi: 1

aggiornamento batch restituito conteggio di riga inaspettata aggiornamento; conteggio attuale conteggio: 0; previsto: 1

mia Dal codice:

public T Save(T item) 
     { 
      using (ISession session = NHibernateHelper.GetSession()) 
      { 
       using (var transaction = session.BeginTransaction()) 
       { 
        session.SaveOrUpdate(item); 

        transaction.Commit(); 

        return item; 
       } 
      } 
     } 

Il mio file log4net:

comando 0: UPDATE Metadata_FriendDetails SET UserId = @ p0, e-mail = @ p1, Name = @ p2 WHERE FriendId = @ p3; @ p0 = a358ab9d-d481-4bdd-8cb2-18ddc8898c70 [Tipo: Guid (0)], @ p1 = '[email protected]' [Tipo: String (4000)], @ p2 = 'myFriend' [Tipo: String (4000)], @ p3 = 2ea35658-edb1-43e3-b848-e1915d1042df [Tipo: Guid (0)]

2011-12-02 13: 06: 49.750 [agente: adattatore filettato utilizzata per la prova 'SaveFriendDetails_Test' con id '17016e48- 1ff4-4dea-8536-6aa3b24e5fb7' ] DEBUG NHibernate.AdoNet.AbstractBatcher - chiuso IDbCommand, aperti IDbCommands: 0 2011-12-02 13: 06: 49.751 [agente: adattatore filettato corsa per test 'SaveFriendDetails_Test' con id '17016e48-1ff4-4dea-8536-6aa3b24e5fb7'] ERRORE NHibernate.Event.Default.AbstractFlushingEventListener - Impossibile sincronizzare lo stato del database con la sessione NHibernate.StaleStateException: l'aggiornamento batch ha restituito la riga inattesa conteggio da aggiornamento; conteggio effettivo delle righe: 0; atteso: 1

Qualcuno vede il problema?

TIA

+2

Un paio di possiblites, l'oggetto è indipendente e non è mai stato actaully creato nel databse, quindi non c'è nessuna riga oggetto originale da aggiornare. O qualcosa ha cambiato un valore nella tabella prima del tuo aggiornamento. Presumo che questa sia un'eccezione ripetibile? Sarebbe utile pubblicare alcuni sniffer di codice su come si stanno creando, aggiornando e salvando l'oggetto. – user957902

+0

Penso che dovresti scrivere l'origine dell'eccezione con l'eccezione. Sarà più utile. – Joshi

+0

added.i non è in grado di vedere perché: NHibernate.Event.Default.AbstractFlushingEventListener - Impossibile sincronizzare lo stato del database con la sessione NHibernate –

risposta

32

il problema era che su Save non dovrei fornire il valore id e aggiornata devo fornirla.

+1

Non appena possibile, accertarsi di contrassegnare questa risposta come accettata in modo che gli altri sappiano che esiste una soluzione. –

3

Prima di salvare, è necessario impostare l'oggetto Id su null.

esempio:

obj.setId(null); 
objectDao.save(obj); 
+0

se hai un ID intero devi usare: obj.setId (0) - quindi funziona. Non funzionava per me, perché avevo impostato l'ID su -1 – bernhardrusch

Problemi correlati