public void AmbientTransactionCommitsIteself() { var seed = new Seed32(); var hits = 0; using (var manager = new TransactionManager<int, MockClassA>() ) { manager.TransactionCommitted += new TransactionCommit<int, MockClassA> (delegate(ITransaction<int, MockClassA> transaction) { Assert.AreEqual(3, transaction.GetEnlistedActions().Count()); hits++; transaction.MarkComplete(); hits = 1; }); var testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); using (var tLock1 = manager.GetActiveTransaction(false)) { foreach (var entity in testEntities) tLock1.Transaction.Enlist(Action.Create, entity.Id, entity); var sw = new Stopwatch(); sw.Start(); while (sw.ElapsedMilliseconds < 5500) Thread.Sleep(10); } Thread.Sleep(500); Assert.AreEqual(1, hits); } }
public void TransactionManagerRollsbackAmbientTransactionsOnAllThreads() { var seed = new Seed32(); using (var manager = new TransactionManager<int, MockClassA>() ) { manager.TransactionCommitted += new TransactionCommit<int, MockClassA> (delegate(ITransaction<int, MockClassA> transaction) { transaction.MarkComplete(); Assert.Fail(); }); var testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); using (var tLock1 = manager.GetActiveTransaction(false)) { foreach (var entity in testEntities) tLock1.Transaction.Enlist(Action.Create, entity.Id, entity); using (var tLock2 = manager.GetActiveTransaction(false)) { testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); foreach (var entity in testEntities) tLock2.Transaction.Enlist(Action.Create, entity.Id, entity); manager.RollBackAll(true); } } Assert.AreEqual(manager.GetCached().Count(), 0); } }