VoteRollBack() public method

Votes to roll back the transaction
public VoteRollBack ( ) : void
return void
Beispiel #1
0
 /// <summary>
 /// Votes to roll back the transaction
 /// </summary>
 public override void VoteRollBack()
 {
     if (mode == TransactionMode.Inherits && parentTransactionScope != null)
     {
         parentTransactionScope.VoteRollBack();
     }
     Rollback = true;
 }
        public void LotsOfNestedTransactionWithDifferentConfigurations()
        {
            using(var root = new TransactionScope())
            {
                using(var t1 = new TransactionScope()) // Isolated
                {
                    var blog = new Blog();

                    Blog.FindAll(); // Just to force a session association

                    using(new TransactionScope(TransactionMode.Inherits))
                    {
                        Blog.FindAll(); // Just to force a session association

                        blog.Author = "hammett";
                        blog.Name = "some name";
                        blog.Save();
                    }

                    using(new TransactionScope(TransactionMode.Inherits))
                    {
                        var post = new Post(blog, "title", "post contents", "Castle");

                        post.Save();
                    }

                    t1.VoteRollBack();
                }

                Blog.FindAll(); // Cant be locked

                using(new TransactionScope())
                {
                    var blog = new Blog();
                    Blog.FindAll(); // Just to force a session association

                    using(new TransactionScope())
                    {
                        Blog.FindAll(); // Just to force a session association

                        blog.Author = "hammett";
                        blog.Name = "some name";
                        blog.Save();
                    }

                    using(var t1n = new TransactionScope(TransactionMode.Inherits))
                    {
                        var post = new Post(blog, "title", "post contents", "Castle");

                        try
                        {
                            post.SaveWithException();
                        }
                        catch(Exception)
                        {
                            t1n.VoteRollBack();
                        }
                    }
                }

                root.VoteCommit();
            }

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.AreEqual(1, blogs.Length);

                var posts = Post.FindAll().ToArray();
                Assert.AreEqual(0, posts.Length);
            }
        }
        public void RollbackVote()
        {
            using(var transaction = new TransactionScope())
            {
                var blog = new Blog {Author = "hammett", Name = "some name"};
                blog.Save();

                var post = new Post(blog, "title", "post contents", "Castle");
                post.Save();

                // pretend something went wrong

                transaction.VoteRollBack();
            }

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.AreEqual(0, blogs.Length);

                var posts = Post.FindAll().ToArray();
                Assert.AreEqual(0, posts.Length);
            }
        }
        public void RollbackUponException()
        {
            using(var transaction = new TransactionScope())
            {
                var blog = new Blog {Author = "hammett", Name = "some name"};
                blog.Save();

                var post = new Post(blog, "title", "post contents", "Castle");

                try
                {
                    post.SaveWithException();
                }
                catch(Exception)
                {
                    transaction.VoteRollBack();
                }
            }

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.AreEqual(0, blogs.Length);

                var posts = Post.FindAll().ToArray();
                Assert.AreEqual(0, posts.Length);
            }
        }
        public void NestedTransactions()
        {
            using(new TransactionScope())
            {
                var blog = new Blog();

                using(var t1 = new TransactionScope(TransactionMode.Inherits))
                {
                    blog.Author = "hammett";
                    blog.Name = "some name";
                    blog.Save();

                    t1.VoteCommit();
                }

                using(var t2 = new TransactionScope(TransactionMode.Inherits))
                {
                    var post = new Post(blog, "title", "post contents", "Castle");

                    try
                    {
                        post.SaveWithException();
                    }
                    catch(Exception)
                    {
                        t2.VoteRollBack();
                    }
                }
            }

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.AreEqual(0, blogs.Length);

                var posts = Post.FindAll().ToArray();
                Assert.AreEqual(0, posts.Length);
            }
        }
        public void MixingSessionScopeAndTransactionScopes3()
        {
            var b = new Blog();

            using(new SessionScope())
            {
                b.Name = "a";
                b.Author = "x";
                b.Save();

                using(new TransactionScope())
                {
                    for(var i = 1; i <= 10; i++)
                    {
                        var post = new Post(b, "t", "c", "General");
                        post.Save();
                    }
                }
            }

            using(new SessionScope())
            {
                // We should load this outside the transaction scope

                b = Blog.Find(b.Id);

                using(var transaction = new TransactionScope())
                {
                    if (b.Posts.Count > 0)
                        foreach(var p in b.Posts)
                        {
                            p.Delete();
                        }

                    b.Delete();

                    transaction.VoteRollBack();
                }
            }

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.AreEqual(1, blogs.Length);

                var posts = Post.FindAll().ToArray();
                Assert.AreEqual(10, posts.Length);
            }
        }
        public void UsingTransactionScopeWithRollback()
        {
            SqlConnection conn = CreateSqlConnection2();
            ISession session1, session2;
            ITransaction trans1, trans2;

            using(TransactionScope scope = new TransactionScope())
            {
                Blog blog = new Blog {Name = "hammett's blog", Author = "hamilton verissimo"};
                blog.Save();

                session1 = blog.GetCurrentSession();
                trans1 = blog.GetCurrentSession().Transaction;
                Assert.IsNotNull(session1);
                Assert.IsNotNull(session1.Transaction);
                Assert.IsFalse(session1.Transaction.WasCommitted);
                Assert.IsFalse(session1.Transaction.WasRolledBack);

                blog.Evict();
                conn.Open();

                using(new DifferentDatabaseScope(conn))
                {
                    blog.Create();

                    session2 = blog.GetCurrentSession();
                    trans2 = blog.GetCurrentSession().Transaction;
                    Assert.IsNotNull(session2);

                    Assert.IsFalse( Object.ReferenceEquals(session1, session2) );

                    Assert.IsNotNull(session2.Transaction);
                    Assert.IsFalse(session2.Transaction.WasCommitted);
                    Assert.IsFalse(session2.Transaction.WasRolledBack);

                    scope.VoteRollBack();
                }
            }

            Assert.IsFalse(session1.IsOpen);
            Assert.IsFalse(session2.IsOpen);
            Assert.IsFalse(trans1.WasCommitted);
            Assert.IsTrue(trans1.WasRolledBack);
            Assert.IsFalse(trans2.WasCommitted);
            Assert.IsTrue(trans2.WasRolledBack);

            using (new SessionScope()) {
                var blogs = Blog.FindAll().ToArray();
                Assert.IsNotNull( blogs );
                Assert.AreEqual(0, Blog.Count());

                var blogs2 = OtherDbBlog.FindAll().ToArray();
                Assert.IsNotNull( blogs2 );
                Assert.AreEqual(0, OtherDbBlog.Count());
            }
        }