/// <summary> /// Generates schema migrations from the datasource as C# source code /// </summary> /// <param name="context">Define data required to generate the C# migrations</param> public void Generate(SchemaMigrationContext context) { Announcer.AnnounceTime = context.AnnounceTime; Announcer.Say(string.Format("Generating schema {0} migrations from {1}", context.Type, context.FromConnectionString)); using (var connection = GetConnection(context)) { var processor = GetProcessor(connection); var schemaDumper = GetSchemaDumper(processor); if (context.MigrationRequired(MigrationType.Tables) || context.MigrationRequired(MigrationType.Indexes) || context.MigrationRequired(MigrationType.Data) || context.MigrationRequired(MigrationType.ForeignKeys)) { var tables = new CSharpTableMigrationsWriter(Announcer); tables.GenerateMigrations(context, schemaDumper); } if (context.MigrationRequired(MigrationType.Procedures)) { var procedures = new CSharpProcedureMigrationsWriter(Announcer); procedures.GenerateMigrations(context, schemaDumper); } if (context.MigrationRequired(MigrationType.Functions)) { var functions = new CSharpFunctionMigrationsWriter(Announcer); functions.GenerateMigrations(context, schemaDumper); } // Migrate the views last as procedures or functions may be included in them if (context.MigrationRequired(MigrationType.Views)) { var views = new CSharpViewMigrationsWriter(Announcer); views.GenerateMigrations(context, schemaDumper); } } }
/// <summary> /// Generates C# files from the supplied procedure definitions /// </summary> /// <param name="context">The context that defines how the migrations should be created</param> /// <param name="procedureDefinitions">The procedure definitions that are the source for thr migration</param> private string GenerateProcedureMigrations(SchemaMigrationContext context, params ProcedureDefinition[] procedureDefinitions) { var mockDumper = new Mock<ISchemaDumper>(); var writer = new CSharpProcedureMigrationsWriter(new DebugAnnouncer()); mockDumper.Setup(m => m.ReadProcedures()).Returns(procedureDefinitions); writer.GenerateMigrations(context, mockDumper.Object); var migrationsFile = Path.Combine(_tempDirectory, @"Migrations\Test.cs"); return File.Exists(migrationsFile) ? File.ReadAllText(migrationsFile) : string.Empty; }