public void VerifyThatTableWithColumnsCanBeCreatedAndRemoved()
        {
            var template = new AllTypeThing();

            Assert.Throws <InvalidDataException>(() => AllTypeThing.All());

            DatabaseSession.Instance.Connector.CreateTableWithColumns(template);
            DatabaseSession.Instance.Connector.CreatePrimaryKeyConstraint(template);

            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckTableExists(template));

            var saveItem1 = new AllTypeThing
            {
                Uuid       = Guid.NewGuid(),
                SomeString = string.Empty,
                SomeDate   = DateTime.Now,
                SomeEnum   = ConnectorType.Postgresql
            };

            saveItem1.SomeGuidList.Add(Guid.NewGuid());
            saveItem1.SomeGuidList.Add(Guid.NewGuid());
            saveItem1.SomeGuidList.Add(Guid.NewGuid());

            saveItem1.SomeList.Add("Aleds");
            saveItem1.SomeList.Add("Aleds2");
            saveItem1.SomeList.Add("Aleds3");

            var saveItem2 = new AllTypeThing
            {
                Uuid       = Guid.NewGuid(),
                SomeString = string.Empty
            };

            saveItem2.SomeGuidList.Add(Guid.NewGuid());
            saveItem2.SomeGuidList.Add(Guid.NewGuid());
            saveItem2.SomeList.Add("Aleds");
            saveItem2.SomeList.Add("Aleds2");
            saveItem2.SomeList.Add("Aleds3");

            saveItem1.Save();
            saveItem2.Save();

            Assert.AreEqual(2, DatabaseSession.Instance.Connector.ReadRecords <AllTypeThing>().ToList().Count);
            Assert.AreEqual(1, DatabaseSession.Instance.Connector.ReadRecords <AllTypeThing>(limit: 1).ToList().Count);
            Assert.AreEqual(1, DatabaseSession.Instance.Connector.ReadRecords <AllTypeThing>(limit: 20, offset: 1, orderBy: template.GetType().GetProperty(template.PrimaryKey)).ToList().Count);
            Assert.AreEqual(1, DatabaseSession.Instance.Connector.ReadRecords <AllTypeThing>(offset: 1).ToList().Count);

            var newString = "IsSome";

            saveItem1.SomeString = newString;

            saveItem1.Save(ignoreNull: true);

            var getSave1 = AllTypeThing.Find(saveItem1.Uuid);

            Assert.AreEqual(newString, getSave1.SomeString);

            saveItem1.Delete();
            saveItem2.Delete();

            saveItem1.Save();
            saveItem2.Save();

            var transaction = DatabaseSession.Instance.CreateTransaction();

            saveItem1.Save(transaction: transaction);
            saveItem2.Save(transaction: transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);

            transaction = DatabaseSession.Instance.CreateTransaction();
            saveItem1.Delete(transaction);
            saveItem2.Delete(transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);
            DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(template.GetType().GetProperty(template.PrimaryKey), template);
            Assert.Throws <InvalidDataException>(
                () =>
                DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(
                    template.GetType().GetProperty(template.PrimaryKey), template));

            DatabaseSession.Instance.Connector.CreatePrimaryKeyConstraint(template);
            transaction = DatabaseSession.Instance.CreateTransaction();
            DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(template.GetType().GetProperty(template.PrimaryKey), template, transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);

            Assert.IsEmpty(DatabaseSession.Instance.Connector.ReadRecords <AllTypeThing>().ToList());

            DatabaseSession.Instance.Connector.DeleteTable(new AllTypeThing());
        }