protected override void AddToCollection(ICollection collection, Person person)
 {
     PersistentBag concrete = collection as PersistentBag;
     if (concrete != null)
         concrete.Add(person);
     else
         ((ArrayList)collection).Add(person);
 }
        public void InvalidCollection()
        {
            // we are testing that work for Bag, List, Set PersistentCollections
            Person parent = CreateGrandparent();
            SavePerson(parent);

            using (ISession s = OpenSession())
            using (ITransaction tx = s.BeginTransaction())
            {
                Person p = s.CreateQuery("from Person p where p.Name = 'GP'")
                    .UniqueResult<Person>();

                NHibernateUtil.Initialize(p.Children);

                Assert.IsTrue(vengine.IsValid(p));

                for (int i = 0; i < 10; i++)
                {
                    Person child = new Person("CC" + i);
                    child.Parent = parent;
                    AddToCollection(p.Children, child);
                }

                Assert.IsFalse(vengine.IsValid(p));

                tx.Rollback();
            }

            using (ISession s = OpenSession())
            using (ITransaction tx = s.BeginTransaction())
            {
                Person p = s.CreateQuery("from Person p where p.Name = 'GP'")
                    .UniqueResult<Person>();

                NHibernateUtil.Initialize(p.Friends);

                Assert.IsTrue(vengine.IsValid(p));

                for (int i = 0; i < 3; i++)
                {
                    Person friend = new Person("FF" + i);
                    AddToCollection(p.Friends, friend);
                }

                Assert.IsFalse(vengine.IsValid(p));

                tx.Rollback();
            }

            CleanUp();
        }
 protected override void AddToCollection(ICollection<Person> collection, Person person)
 {
     collection.Add(person);
 }
 private void SavePerson(Person parent)
 {
     using (ISession s = OpenSession())
     using (ITransaction tx = s.BeginTransaction())
     {
         s.Save(parent);
         tx.Commit();
     }
 }
        private Person CreateGrandparent()
        {
            Person parent = new Person("GP");
            parent.Children = GCreateCollection();

            for (int i = 0; i < 2; i++)
            {
                Person child = new Person("C" + i);
                child.Parent = parent;
                AddToCollection(parent.Children, child);

                child.Children = GCreateCollection();

                for (int j = 0; j < 3; j++)
                {
                    Person grandChild = new Person("C" + i + "-" + j);
                    grandChild.Parent = child;
                    AddToCollection(child.Children, grandChild);
                }
            }

            parent.Friends = CreateCollection();
            for (int i = 0; i < 3; i++)
            {
                Person friend = new Person("F" + i);
                AddToCollection(parent.Friends, friend);
            }
            return parent;
        }
 protected abstract void AddToCollection(ICollection<Person> collection, Person person);
 protected override void AddToCollection(ICollection collection, Person person)
 {
     ((ISet) collection).Add(person);
 }