Пример #1
0
        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);
        }
Пример #2
0
        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();
            }
        }