public void Save()
		{
			DeleteData();

			ISession s = OpenSession();

			ITransaction t = s.BeginTransaction();

			Widget obj = new Widget();
			obj.ValueThree = 5;

			int id = (int) s.Save(obj);

			t.Commit();
			s.Close();

			s = OpenSession();
			t = s.BeginTransaction();

			IDriver driver = sessions.ConnectionProvider.Driver;

			IDbConnection connection = s.Connection;
			IDbCommand statement = driver.GenerateCommand(
				CommandType.Text,
				SqlString.Parse("SELECT * FROM STRANGE_TYPED_OBJECT WHERE ID=?"),
				new SqlType[] {SqlTypeFactory.Int32});
			statement.Connection = connection;
			t.Enlist(statement);
			((IDataParameter) statement.Parameters[0]).Value = id;
			IDataReader reader = statement.ExecuteReader();

			Assert.IsTrue(reader.Read(), "A row should have been returned");
			Assert.IsTrue(reader.GetValue(reader.GetOrdinal("VALUE_ONE")) == DBNull.Value,
			              "Default value should have been mapped to null");
			Assert.IsTrue(reader.GetValue(reader.GetOrdinal("VALUE_TWO")) == DBNull.Value,
			              "Default value should have been mapped to null");
			Assert.AreEqual(Convert.ToInt32(reader.GetValue(reader.GetOrdinal("VALUE_THREE"))), 5,
			                "Non-Default value should not be changed");
			Assert.IsTrue(reader.GetValue(reader.GetOrdinal("VALUE_FOUR")) == DBNull.Value,
			              "Default value should have been mapped to null");
			reader.Close();

			t.Commit();
			s.Close();

            DeleteData();
        }
		private void InitData()
		{
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();

			Widget obj = new Widget();
			obj.ValueOne = (7);
			obj.ValueTwo = (8);
			obj.ValueThree = (9);
			obj.ValueFour = (10);
			obj.Str = "all-normal";
			s.Save(obj);

			obj = new Widget();
			obj.ValueOne = (1);
			obj.ValueTwo = (2);
			obj.ValueThree = (-1);
			obj.ValueFour = (-5);
			obj.Str = ("all-default");
			s.Save(obj);

			t.Commit();
			s.Close();
		}