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 "