public override string Generate(
            string migrationNamespace,
            string migrationName,
            IReadOnlyList <MigrationOperation> upOperations,
            IReadOnlyList <MigrationOperation> downOperations)
        {
            Check.NotEmpty(migrationNamespace, nameof(migrationNamespace));
            Check.NotEmpty(migrationName, nameof(migrationName));
            Check.NotNull(upOperations, nameof(upOperations));
            Check.NotNull(downOperations, nameof(downOperations));

            var builder = new IndentedStringBuilder();

            builder
            .AppendLine("using System.Collections.Generic;")
            .AppendLine("using Microsoft.Data.Entity.Relational.Migrations;")
            .AppendLine("using Microsoft.Data.Entity.Relational.Migrations.Builders;")
            .AppendLine("using Microsoft.Data.Entity.Relational.Migrations.Operations;")
            .AppendLine()
            .Append("namespace ").AppendLine(migrationNamespace)
            .AppendLine("{");
            using (builder.Indent())
            {
                builder
                .Append("public partial class ").Append(_code.Identifier(migrationName)).AppendLine(" : Migration")
                .AppendLine("{");
                using (builder.Indent())
                {
                    builder
                    .AppendLine("public override void Up(MigrationBuilder migration)")
                    .AppendLine("{");
                    using (builder.Indent())
                    {
                        _operationGenerator.Generate("migration", upOperations, builder);
                    }
                    builder
                    .AppendLine("}")
                    .AppendLine()
                    .AppendLine("public override void Down(MigrationBuilder migration)")
                    .AppendLine("{");
                    using (builder.Indent())
                    {
                        _operationGenerator.Generate("migration", downOperations, builder);
                    }
                    builder.AppendLine("}");
                }
                builder.AppendLine("}");
            }
            builder.AppendLine("}");

            return(builder.ToString());
        }
        public override string Generate(
            string migrationNamespace,
            string migrationName,
            IReadOnlyList <MigrationOperation> upOperations,
            IReadOnlyList <MigrationOperation> downOperations)
        {
            Check.NotEmpty(migrationNamespace, nameof(migrationNamespace));
            Check.NotEmpty(migrationName, nameof(migrationName));
            Check.NotNull(upOperations, nameof(upOperations));
            Check.NotNull(downOperations, nameof(downOperations));

            var builder    = new IndentedStringBuilder();
            var namespaces = new List <string>
            {
                "System",
                "System.Collections.Generic",
                "Microsoft.Data.Entity.Migrations"
            };

            namespaces.AddRange(GetNamespaces(upOperations.Concat(downOperations)));
            foreach (var n in namespaces.Distinct())
            {
                builder
                .Append("using ")
                .Append(n)
                .AppendLine(";");
            }
            builder
            .AppendLine()
            .Append("namespace ").AppendLine(_code.Namespace(migrationNamespace))
            .AppendLine("{");
            using (builder.Indent())
            {
                builder
                .Append("public partial class ").Append(_code.Identifier(migrationName)).AppendLine(" : Migration")
                .AppendLine("{");
                using (builder.Indent())
                {
                    builder
                    .AppendLine("protected override void Up(MigrationBuilder migrationBuilder)")
                    .AppendLine("{");
                    using (builder.Indent())
                    {
                        _operationGenerator.Generate("migrationBuilder", upOperations, builder);
                    }
                    builder
                    .AppendLine("}")
                    .AppendLine()
                    .AppendLine("protected override void Down(MigrationBuilder migrationBuilder)")
                    .AppendLine("{");
                    using (builder.Indent())
                    {
                        _operationGenerator.Generate("migrationBuilder", downOperations, builder);
                    }
                    builder.AppendLine("}");
                }
                builder.AppendLine("}");
            }
            builder.AppendLine("}");

            return(builder.ToString());
        }