public void updates_are_batched()
 {
     using (var session = SessionFactory.OpenStatelessSession())
     using (var transaction = session.BeginTransaction())
     {
         session.SetBatchSize(2);
         var builder = new UserGroupBuilder();
         var group1 = builder.Build();
         var group2 = builder.Build();
         var group3 = builder.Build();
         var group4 = builder.Build();
         session.Insert(group1);
         session.Insert(group2);
         session.Insert(group3);
         session.Insert(group4);
         group1.Name = group1.Name + "2";
         group2.Name = group2.Name + "2";
         group3.Name = group3.Name + "2";
         group4.Name = group4.Name + "2";
         session.Update(group1);
         session.Update(group2);
         Logger.Info("the first batch of 2 update statements has been sent to the database");
         session.Update(group3);
         session.Update(group4);
         Logger.Info("the second batch of 2 update statements has been sent to the database, before the session is flushed");
         transaction.Commit();
     }
 }
        public void manipulating_cached_collection_updates_both_database_and_cache()
        {
            var newGroup = new UserGroupBuilder().Build();

            using (var session = CreateSession())
            using (var transaction = session.BeginTransaction())
            {
                var user = session.Get<User>(_user1.Id);
                user.AddUserGroup(newGroup);
                Logger.Info("this causes 2 insert statements");
                transaction.Commit();
            }

            using (var session = CreateSession())
            using (var transaction = session.BeginTransaction())
            {
                var user = session.Get<User>(_user1.Id);
                Logger.Info("this doesn't cause a select statement");
                Assert.IsTrue(user.UserGroups.Contains(newGroup));
                transaction.Commit();
            }

            using (var session = CreateSession())
            using (var transaction = session.BeginTransaction())
            {
                Logger.Info("this session should cause 2 delete statements, and one select statement for the usergroup's user collection, which isn't cached");
                var user = session.Get<User>(_user1.Id);
                var group = session.Get<UserGroup>(newGroup.Id);
                user.RemoveUserGroup(group);
                session.Delete(group);
                transaction.Commit();
            }

            using (var session = CreateSession())
            using (var transaction = session.BeginTransaction())
            {
                var user = session.Get<User>(_user1.Id);
                Logger.Info("this causes a select because the object is no longer in the cache");
                Assert.IsNull(session.Get<UserGroup>(newGroup.Id)); 
                Logger.Info("this doesn't cause a select statement");
                Assert.AreEqual(0, user.UserGroups.Count(g => g.Id == newGroup.Id));
                transaction.Commit();
            }
        }