public CSeedScript Convert(KTable kTable)
        {
            var seedScript = new CSeedScript();
            var codeWriter = new CodeWriter();

            if (kTable.GeneratedTable.Row.Count == 0)
            {
                codeWriter.WriteLine($"-- Sample data has not been supplied for {kTable.GeneratedTable.TableName} ");
            }
            var firstRow = true;

            foreach (var row in kTable.GeneratedTable.Row)
            {
                if (!firstRow)
                {
                    codeWriter.WriteLine("UNION ALL");
                }
                codeWriter.Write("INSERT INTO (");
                var firstColumnHeader = true;
                foreach (var column in kTable.GeneratedTable.Column)
                {
                    if (!firstColumnHeader)
                    {
                        codeWriter.Write(", ");
                    }
                    codeWriter.Write($"[{column.ColumnName}]");

                    firstColumnHeader = false;
                }
                codeWriter.Write(") VALUES (");

                var firstColumnValue = true;
                foreach (var column in kTable.GeneratedTable.Column)
                {
                    if (!firstColumnValue)
                    {
                        codeWriter.Write(", ");
                    }

                    var data = row.RowData.FirstOrDefault(rd => rd.Column.ColumnName == column.ColumnName);
                    if (data != null)
                    {
                        codeWriter.Write($"{data}");
                    }
                    else
                    {
                        codeWriter.Write("NULL");
                    }
                    firstColumnValue = false;
                }
                codeWriter.WriteLine(")");

                firstRow = false;
            }

            seedScript.SeedScriptBody = codeWriter.ToString();
            return(seedScript);
        }
        public CSeedScript Convert(CTable table)
        {
            var seedScript = new CSeedScript {
                SeedScriptName = $"Seed{table.TableName}"
            };
            var stringBuilder = new StringBuilder();

            foreach (var row in table.Row)
            {
                stringBuilder.AppendLine(
                    $"EXEC [{table.InsertStoredProcedure.Schema.SchemaName}].[{table.InsertStoredProcedure.StoredProcedureName}]");

                var first = true;
                foreach (var rowData in row.RowData)
                {
                    // if (rowData.Column.IsIdentity)
                    //   continue;

                    if (!first)
                    {
                        stringBuilder.Append(", ");
                    }

                    var parameter = table.InsertStoredProcedure.Parameter.FirstOrDefault(p =>
                                                                                         p.SourceColumn.ColumnName == rowData.Column.ColumnName);
                    var value = "NULL";
                    if (rowData.Column.ColumnType == DbType.String ||
                        rowData.Column.ColumnType == DbType.StringFixedLength ||
                        rowData.Column.ColumnType == DbType.AnsiString ||
                        rowData.Column.ColumnType == DbType.AnsiStringFixedLength)
                    {
                        value = $"'{rowData.Value}'";
                    }
                    else
                    {
                        value = $"{rowData.Value}";
                    }
                    stringBuilder.Append($"@{parameter.ParameterName} = {value}");
                    first = false;
                }
                stringBuilder.AppendLine();
                stringBuilder.AppendLine();
                stringBuilder.AppendLine("GO");
                stringBuilder.AppendLine();
            }

            seedScript.SeedScriptBody = stringBuilder.ToString();
            return(seedScript);
        }
        private void AddSeedScripts(CProject dataProject, List <CTable> tables)
        {
            var executeScripts = new CodeWriter();

            foreach (var table in tables)
            {
                if (table.Row.Count == 0)
                {
                    continue; //no data to seed
                }
                var converter  = new CTableToSSeedScriptConverter();
                var seedScript = converter.Convert(table);
                dataProject.ProjectContent.Add(new CProjectContent
                {
                    Content     = seedScript,
                    BuildAction = CBuildAction.None,
                    File        = new CFile
                    {
                        Folder   = $@"Scripts\Post Deployment\Seed",
                        FileName = $"{seedScript.SeedScriptName}.sql"
                    }
                });
                executeScripts.WriteLine($@":r .\Seed\{seedScript.SeedScriptName}.sql");
            }
            //add script to execute them
            var executeSeedScript = new CSeedScript
            {
                SeedScriptBody = executeScripts.ToString(),
                SeedScriptName = "Script.PostDeployment"
            };

            dataProject.ProjectContent.Add(new CProjectContent
            {
                Content     = executeSeedScript,
                BuildAction = CBuildAction.PostDeploy,
                File        = new CFile
                {
                    Folder   = $@"Scripts\Post Deployment\",
                    FileName = $"{executeSeedScript.SeedScriptName}.sql"
                }
            });
        }