public void Update()
		{
			// prepare some test data...
			User user;
			using (ISession session = OpenSession())
			{
				session.BeginTransaction();
				user = new User();
				user.UserName = "******";
				user.Email = "*****@*****.**";
				user.Password = "******";
				session.Save(user);
				session.Transaction.Commit();
			}
			// 'user' is now a detached entity, so lets change a property and reattch...
			user.Password = "******";
			using (ISession session = OpenSession())
			{
				session.BeginTransaction();
				session.Update(user);
				session.Transaction.Commit();
			}

			// clean up
			using (ISession session = OpenSession())
			{
				session.BeginTransaction();
				session.Delete(user);
				session.Transaction.Commit();
			}
		}
		public void NaturalIdCheck()
		{
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();

			User u = new User("steve", "superSecret");
			s.Persist(u);
			u.UserName = "******";
			try
			{
				s.Flush();
				Assert.Fail();
			}
			catch (HibernateException) {}
			u.UserName = "******";
			s.Delete(u);
			t.Commit();
			s.Close();
		}
		public void NaturalIdCache()
		{
			ISession s = OpenSession();
			s.BeginTransaction();
			User u = new User("steve", "superSecret");
			s.Persist(u);
			s.Transaction.Commit();
			s.Close();

			sessions.Statistics.Clear();

			s = OpenSession();
			s.BeginTransaction();
			u =
				(User)
				s.CreateCriteria(typeof (User)).Add(Restrictions.NaturalId().Set("UserName", "steve")).SetCacheable(true).
					UniqueResult();
			Assert.That(u, Is.Not.Null);
			s.Transaction.Commit();
			s.Close();

			Assert.AreEqual(1, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(0, sessions.Statistics.QueryCacheHitCount);
			Assert.AreEqual(1, sessions.Statistics.QueryCachePutCount);

			s = OpenSession();
			s.BeginTransaction();
			User v = new User("gavin", "supsup");
			s.Persist(v);
			s.Transaction.Commit();
			s.Close();

			sessions.Statistics.Clear();

			s = OpenSession();
			s.BeginTransaction();
			u =
				(User)
				s.CreateCriteria(typeof(User)).Add(Restrictions.NaturalId().Set("UserName", "steve")).SetCacheable(true).
					UniqueResult();
			Assert.That(u, Is.Not.Null);
			Assert.AreEqual(0, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(1, sessions.Statistics.QueryCacheHitCount);
			u =
				(User)
				s.CreateCriteria(typeof(User)).Add(Restrictions.NaturalId().Set("UserName", "steve")).SetCacheable(true).
					UniqueResult();
			Assert.That(u, Is.Not.Null);
			Assert.AreEqual(0, sessions.Statistics.QueryExecutionCount);
			Assert.AreEqual(2, sessions.Statistics.QueryCacheHitCount);
			s.Transaction.Commit();
			s.Close();

			s = OpenSession();
			s.BeginTransaction();
			s.Delete("from User");
			s.Transaction.Commit();
			s.Close();
		}