static async Task TransactionPromotionsAsync() { var tx = new CommittableTransaction(); DisplayTransactionInformation("TX created", tx.TransactionInformation); try { var b = new Book { Title = "A Cat in The House", Publisher = "Pet Show", Isbn = string.Join("", Guid.NewGuid().ToString().ToCharArray().Take(15)), ReleaseDate = new DateTime(2019, 11, 24) }; var data = new BookData(); await data.AddBookAsync(b, tx); DisplayTransactionInformation("First Connection", tx.TransactionInformation); var b2 = new Book { Title = "A Rabbit in The House", Publisher = "Pet Show", Isbn = string.Join("", Guid.NewGuid().ToString().ToCharArray().Take(15)), ReleaseDate = new DateTime(2020, 11, 24) }; var data2 = new BookData(); await data2.AddBookAsync(b2, tx); DisplayTransactionInformation("Second Connection", tx.TransactionInformation); if (AbortTx()) { throw new ApplicationException("transaction abort by the user"); } tx.Commit(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(); tx.Rollback(); } DisplayTransactionInformation("TX completed", tx.TransactionInformation); }
static void NestedScopes() { using (var scope = new TransactionScope()) { Transaction.Current.TransactionCompleted += (sender, e) => DisplayTransactionInformation("TX completed", e.Transaction.TransactionInformation); DisplayTransactionInformation("Ambient TX created", Transaction.Current.TransactionInformation); var b = new Book { Title = "Dogs in The House", Publisher = "Pet Show", Isbn = RandomIsbn(), ReleaseDate = new DateTime(2020, 11, 24) }; var data = new BookData(); data.AddBook(b); using (var scope2 = new TransactionScope(TransactionScopeOption.RequiresNew)) { Transaction.Current.TransactionCompleted += (sender, e) => DisplayTransactionInformation("Inner TX completed", e.Transaction.TransactionInformation); DisplayTransactionInformation("Inner TX scope", Transaction.Current.TransactionInformation); var b1 = new Book { Title = "Dogs and Cats in The House", Publisher = "Pet Show", Isbn = RandomIsbn(), ReleaseDate = new DateTime(2021, 11, 24) }; var data1 = new BookData(); data1.AddBook(b1); scope2.Complete(); } scope.Complete(); } }