2009-06-17 7 views
5

Ho il seguente codice (semplificato per motivi di discussione). Quello che non capisco è il motivo per cui la proprietà session.Transaction restituisce una transazione diversa dopo un rollback.Session.Transaction cambia dopo il rollback (NHibernate)

Ad esempio, ciò significa che la proprietà Session.Transaction.WasRolledBack è di poco aiuto a meno che non memorizzi un riferimento alla prima transazione e controlli la proprietà della transazione.

Qualcuno può fornire qualche informazione qui?

int transId = session.Transaction.GetHashCode(); 

using (var tx = session.BeginTransaction()) 
{ 
    Assert.AreEqual(transId, tx.GetHashCode()); 

    tx.Rollback(); 

    Assert.AreEqual(transId, tx.GetHashCode()); 
    Assert.AreEqual(transId, session.Transaction.GetHashCode()); // Fails 
} 

Update: risposta

David Walschots' è molto utile e preciso. Inoltre, ho trovato quanto segue nella Nhibernate Documentation:

Se rollback della transazione si dovrebbe immediatamente chiudere e scartare la sessione corrente per garantire che lo stato interno di NHibernate è coerente "

risposta

6

Da NHibernate in azione. (Kuaté, Harris, Bauer, King):

"Dopo aver eseguito una transazione, la sessione di NHibernate la sostituisce con una nuova transazione. Ciò significa che dovresti mantenere un riferimento alla transazione che stai commettendo se pensi di averne bisogno in seguito. Questo è necessario se è necessario chiamare la transazione. Wommercommited. session.Transaction.WasCommitted restituisce sempre false. "

Molto probabilmente lo stesso si applica alla proprietà Transaction.WasRolledBack.

Problemi correlati