Exemplo n.º 1
0
        public void MergeTreeWithGeneratedId()
        {
            ClearCounts();

            var root  = new NumberedNode("root", RoundForDialect(DateTime.Now));
            var child = new NumberedNode("child", RoundForDialect(DateTime.Now));

            using (ISession s = OpenSession())
                using (ITransaction tx = s.BeginTransaction())
                {
                    root.AddChild(child);
                    s.Persist(root);
                    tx.Commit();
                }

            AssertInsertCount(2);
            ClearCounts();

            root.Description  = "The root node";
            child.Description = "The child node";

            var secondChild = new NumberedNode("second child", RoundForDialect(DateTime.Now));

            root.AddChild(secondChild);

            using (var s = OpenSession())
                using (var tx = s.BeginTransaction())
                {
                    s.Merge(root);
                    tx.Commit();
                }

            AssertInsertCount(1);
            AssertUpdateCount(2);
        }
Exemplo n.º 2
0
        public void MergeTreeWithGeneratedId()
        {
            ClearCounts();

            ISession     s     = OpenSession();
            ITransaction tx    = s.BeginTransaction();
            var          root  = new NumberedNode("root");
            var          child = new NumberedNode("child");

            root.AddChild(child);
            s.Persist(root);
            tx.Commit();
            s.Close();

            AssertInsertCount(2);
            ClearCounts();

            root.Description  = "The root node";
            child.Description = "The child node";

            var secondChild = new NumberedNode("second child");

            root.AddChild(secondChild);

            s  = OpenSession();
            tx = s.BeginTransaction();
            s.Merge(root);
            tx.Commit();
            s.Close();

            AssertInsertCount(1);
            AssertUpdateCount(2);
        }
Exemplo n.º 3
0
        public async Task MergeTreeWithGeneratedIdAsync()
        {
            ClearCounts();

            var root  = new NumberedNode("root");
            var child = new NumberedNode("child");

            using (ISession s = OpenSession())
                using (ITransaction tx = s.BeginTransaction())
                {
                    root.AddChild(child);
                    await(s.PersistAsync(root));
                    await(tx.CommitAsync());
                }

            AssertInsertCount(2);
            ClearCounts();

            root.Description  = "The root node";
            child.Description = "The child node";

            var secondChild = new NumberedNode("second child");

            root.AddChild(secondChild);

            using (var s = OpenSession())
                using (var tx = s.BeginTransaction())
                {
                    await(s.MergeAsync(root));
                    await(tx.CommitAsync());
                }

            AssertInsertCount(1);
            AssertUpdateCount(2);
        }
Exemplo n.º 4
0
        public void MergeManaged()
        {
            using (ISession s = OpenSession())
            {
                NumberedNode root;
                using (ITransaction tx = s.BeginTransaction())
                {
                    root = new NumberedNode("root", RoundForDialect(DateTime.Now));
                    s.Persist(root);
                    tx.Commit();
                }
                ClearCounts();

                NumberedNode mergedChild;
                using (var tx = s.BeginTransaction())
                {
                    var child = new NumberedNode("child", RoundForDialect(DateTime.Now));
                    root.AddChild(child);
                    Assert.That(s.Merge(root), Is.SameAs(root));
                    IEnumerator <NumberedNode> rit = root.Children.GetEnumerator();
                    rit.MoveNext();
                    mergedChild = rit.Current;
                    Assert.That(mergedChild, Is.Not.SameAs(child));
                    Assert.That(s.Contains(mergedChild));
                    Assert.That(!s.Contains(child));
                    Assert.That(root.Children.Count, Is.EqualTo(1));
                    Assert.That(root.Children.Contains(mergedChild));
                    //assertNotSame( mergedChild, s.Merge(child) ); //yucky :(
                    tx.Commit();
                }

                AssertInsertCount(1);
                AssertUpdateCount(0);

                Assert.That(root.Children.Count, Is.EqualTo(1));
                Assert.That(root.Children.Contains(mergedChild));

                using (var tx = s.BeginTransaction())
                {
                    Assert.That(
                        s.CreateCriteria(typeof(NumberedNode)).SetProjection(Projections.RowCount()).UniqueResult(),
                        Is.EqualTo(2));
                    tx.Rollback();
                }
            }
        }
Exemplo n.º 5
0
        public void MergeDeepTreeWithGeneratedId()
        {
            ClearCounts();

            NumberedNode root;
            NumberedNode child;
            NumberedNode grandchild;

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root       = new NumberedNode("root");
                child      = new NumberedNode("child");
                grandchild = new NumberedNode("grandchild");
                root.AddChild(child);
                child.AddChild(grandchild);
                root = (NumberedNode)s.Merge(root);
                tx.Commit();
            }

            AssertInsertCount(3);
            AssertUpdateCount(0);
            ClearCounts();

            IEnumerator <NumberedNode> rit = root.Children.GetEnumerator();

            rit.MoveNext();
            child = rit.Current;
            IEnumerator <NumberedNode> cit = child.Children.GetEnumerator();

            cit.MoveNext();
            grandchild             = cit.Current;
            grandchild.Description = "the grand child";
            var grandchild2 = new NumberedNode("grandchild2");

            child.AddChild(grandchild2);

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root = (NumberedNode)s.Merge(root);
                tx.Commit();
            }

            AssertInsertCount(1);
            AssertUpdateCount(1);
            ClearCounts();

            sessions.Evict(typeof(NumberedNode));

            var child2      = new NumberedNode("child2");
            var grandchild3 = new NumberedNode("grandchild3");

            child2.AddChild(grandchild3);
            root.AddChild(child2);

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root = (NumberedNode)s.Merge(root);
                tx.Commit();
            }

            AssertInsertCount(2);
            AssertUpdateCount(0);
            ClearCounts();

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                s.Delete("from NumberedNode where name like 'grand%'");
                s.Delete("from NumberedNode where name like 'child%'");
                s.Delete("from NumberedNode");
                tx.Commit();
            }
        }
Exemplo n.º 6
0
		public virtual NumberedNode AddChild(NumberedNode child)
		{
			children.Add(child);
			child.Parent = this;
			return this;
		}
Exemplo n.º 7
0
		public void MergeTreeWithGeneratedId()
		{
			ClearCounts();

			ISession s = OpenSession();
			ITransaction tx = s.BeginTransaction();
			var root = new NumberedNode("root");
			var child = new NumberedNode("child");
			root.AddChild(child);
			s.Persist(root);
			tx.Commit();
			s.Close();

			AssertInsertCount(2);
			ClearCounts();

			root.Description = "The root node";
			child.Description = "The child node";

			var secondChild = new NumberedNode("second child");

			root.AddChild(secondChild);

			s = OpenSession();
			tx = s.BeginTransaction();
			s.Merge(root);
			tx.Commit();
			s.Close();

			AssertInsertCount(1);
			AssertUpdateCount(2);
		}
Exemplo n.º 8
0
		public void MergeManaged()
		{
			ISession s = OpenSession();
			ITransaction tx = s.BeginTransaction();
			var root = new NumberedNode("root");
			s.Persist(root);
			tx.Commit();

			ClearCounts();

			tx = s.BeginTransaction();
			var child = new NumberedNode("child");
			root.AddChild(child);
			Assert.That(s.Merge(root), Is.SameAs(root));
			IEnumerator<NumberedNode> rit = root.Children.GetEnumerator();
			rit.MoveNext();
			NumberedNode mergedChild = rit.Current;
			Assert.That(mergedChild, Is.Not.SameAs(child));
			Assert.That(s.Contains(mergedChild));
			Assert.That(! s.Contains(child));
			Assert.That(root.Children.Count, Is.EqualTo(1));
			Assert.That(root.Children.Contains(mergedChild));
			//assertNotSame( mergedChild, s.Merge(child) ); //yucky :(
			tx.Commit();

			AssertInsertCount(1);
			AssertUpdateCount(0);

			Assert.That(root.Children.Count, Is.EqualTo(1));
			Assert.That(root.Children.Contains(mergedChild));

			tx = s.BeginTransaction();
			Assert.That(s.CreateCriteria(typeof (NumberedNode)).SetProjection(Projections.RowCount()).UniqueResult(),
			            Is.EqualTo(2));
			tx.Rollback();
			s.Close();
		}
Exemplo n.º 9
0
		public void MergeDeepTreeWithGeneratedId()
		{
			ClearCounts();

			NumberedNode root;
			NumberedNode child;
			NumberedNode grandchild;
			using (ISession s = OpenSession())
			{
				ITransaction tx = s.BeginTransaction();
				root = new NumberedNode("root");
				child = new NumberedNode("child");
				grandchild = new NumberedNode("grandchild");
				root.AddChild(child);
				child.AddChild(grandchild);
				root = (NumberedNode) s.Merge(root);
				tx.Commit();
			}

			AssertInsertCount(3);
			AssertUpdateCount(0);
			ClearCounts();

			IEnumerator<NumberedNode> rit = root.Children.GetEnumerator();
			rit.MoveNext();
			child = rit.Current;
			IEnumerator<NumberedNode> cit = child.Children.GetEnumerator();
			cit.MoveNext();
			grandchild = cit.Current;
			grandchild.Description = "the grand child";
			var grandchild2 = new NumberedNode("grandchild2");
			child.AddChild(grandchild2);

			using (ISession s = OpenSession())
			{
				ITransaction tx = s.BeginTransaction();
				root = (NumberedNode) s.Merge(root);
				tx.Commit();
			}

			AssertInsertCount(1);
			AssertUpdateCount(1);
			ClearCounts();

			sessions.Evict(typeof (NumberedNode));

			var child2 = new NumberedNode("child2");
			var grandchild3 = new NumberedNode("grandchild3");
			child2.AddChild(grandchild3);
			root.AddChild(child2);

			using (ISession s = OpenSession())
			{
				ITransaction tx = s.BeginTransaction();
				root = (NumberedNode) s.Merge(root);
				tx.Commit();
			}

			AssertInsertCount(2);
			AssertUpdateCount(0);
			ClearCounts();

			using (ISession s = OpenSession())
			{
				ITransaction tx = s.BeginTransaction();
				s.Delete("from NumberedNode where name like 'grand%'");
				s.Delete("from NumberedNode where name like 'child%'");
				s.Delete("from NumberedNode");
				tx.Commit();
			}
		}
Exemplo n.º 10
0
        public async Task MergeDeepTreeWithGeneratedIdAsync()
        {
            ClearCounts();

            NumberedNode root;
            NumberedNode child;
            NumberedNode grandchild;

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root       = new NumberedNode("root", RoundForDialect(DateTime.Now));
                child      = new NumberedNode("child", RoundForDialect(DateTime.Now));
                grandchild = new NumberedNode("grandchild", RoundForDialect(DateTime.Now));
                root.AddChild(child);
                child.AddChild(grandchild);
                root = (NumberedNode)await(s.MergeAsync(root));
                await(tx.CommitAsync());
            }

            AssertInsertCount(3);
            AssertUpdateCount(0);
            ClearCounts();

            IEnumerator <NumberedNode> rit = root.Children.GetEnumerator();

            rit.MoveNext();
            child = rit.Current;
            IEnumerator <NumberedNode> cit = child.Children.GetEnumerator();

            cit.MoveNext();
            grandchild             = cit.Current;
            grandchild.Description = "the grand child";
            var grandchild2 = new NumberedNode("grandchild2", RoundForDialect(DateTime.Now));

            child.AddChild(grandchild2);

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root = (NumberedNode)await(s.MergeAsync(root));
                await(tx.CommitAsync());
            }

            AssertInsertCount(1);
            AssertUpdateCount(1);
            ClearCounts();

            await(Sfi.EvictAsync(typeof(NumberedNode)));

            var child2      = new NumberedNode("child2", RoundForDialect(DateTime.Now));
            var grandchild3 = new NumberedNode("grandchild3", RoundForDialect(DateTime.Now));

            child2.AddChild(grandchild3);
            root.AddChild(child2);

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                root = (NumberedNode)await(s.MergeAsync(root));
                await(tx.CommitAsync());
            }

            AssertInsertCount(2);
            AssertUpdateCount(0);
            ClearCounts();

            using (ISession s = OpenSession())
            {
                ITransaction tx = s.BeginTransaction();
                await(s.DeleteAsync("from NumberedNode where name like 'grand%'"));
                await(s.DeleteAsync("from NumberedNode where name like 'child%'"));
                await(s.DeleteAsync("from NumberedNode"));
                await(tx.CommitAsync());
            }
        }
Exemplo n.º 11
0
 public virtual NumberedNode AddChild(NumberedNode child)
 {
     children.Add(child);
     child.Parent = this;
     return(this);
 }