/// <summary>
        /// Generates create table commands for the supplied type
        /// </summary>
        internal static void CreateTable <T>(StringBuilder tables, Type type, StringBuilder constraints, StringBuilder manyToManyTables)
        {
            tables.AppendLine("CREATE TABLE [" + type.Name + "] ( ");

            foreach (var pi in DwarfHelper.GetDBProperties(type))
            {
                tables.AppendLine(TypeToColumnName(pi) + " " + TypeToColumnConstruction(type, pi.ContainedProperty));
            }

            foreach (var pi in DwarfHelper.GetGemListProperties(type))
            {
                tables.AppendLine(TypeToColumnName(pi) + " " + TypeToColumnConstruction(type, pi.ContainedProperty));
            }

            foreach (var manyToManyProperty in DwarfHelper.GetManyToManyProperties(type))
            {
                CreateManyToManyTable(type, manyToManyProperty, manyToManyTables, constraints);
            }

            var keys = String.Empty;

            foreach (var propertyInfo in DwarfHelper.GetPKProperties(type))
            {
                keys += TypeToColumnName(propertyInfo) + ", ";
            }

            if (!string.IsNullOrEmpty(keys))
            {
                keys = keys.TruncateEnd(2);

                keys = "CONSTRAINT [PK_" + type.Name + "] PRIMARY KEY (" + keys + ")";

                tables.AppendLine(keys);
            }

            foreach (var pi in DwarfHelper.GetFKProperties <T>(type))
            {
                var constraintName = "FK_" + type.Name + "_" + pi.Name;

                var alterTable = "ALTER TABLE [" + type.Name + "] ADD CONSTRAINT [" + constraintName + "Id] FOREIGN KEY (" +
                                 pi.Name + "Id) REFERENCES [" + pi.PropertyType.Name + "] (Id)";

                if (!DwarfPropertyAttribute.GetAttribute(pi.ContainedProperty).DisableDeleteCascade)
                {
                    alterTable += " ON DELETE CASCADE ";
                }

                constraints.AppendLine(alterTable);
            }
            CreateUniqueConstraint <T>(constraints, type);

            tables.AppendLine(") ");
            tables.AppendLine();
        }