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(); } }