public void Generate_migration_class() { var upgradeOperations = new[] { new AddColumnOperation("dbo.MyTable", new Column("Foo", typeof(int))), new AddColumnOperation("dbo.MyTable", new Column("Bar", typeof(int))) }; var downgradeOperations = new[] { new DropColumnOperation("dbo.MyTable", "Foo"), new DropColumnOperation("dbo.MyTable", "Bar") }; var migration = new MigrationInfo("000000000000001_Name") { UpgradeOperations = upgradeOperations, DowngradeOperations = downgradeOperations }; var codeGenerator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var stringBuilder = new IndentedStringBuilder(); codeGenerator.GenerateMigrationClass("MyNamespace", "MyClass", migration, stringBuilder); Assert.Equal( @"using Microsoft.Data.Entity.Migrations; using Microsoft.Data.Entity.Migrations.Builders; using Microsoft.Data.Entity.Migrations.Model; using System; namespace MyNamespace { public partial class MyClass : Migration { public override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn(""dbo.MyTable"", ""Foo"", c => c.Int()); migrationBuilder.AddColumn(""dbo.MyTable"", ""Bar"", c => c.Int()); } public override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn(""dbo.MyTable"", ""Foo""); migrationBuilder.DropColumn(""dbo.MyTable"", ""Bar""); } } }", stringBuilder.ToString()); }
private void GenerateAndValidateCode(MigrationInfo migration) { var @namespace = GetType().Namespace + ".DynamicallyCompiled"; var className = "Migration" + Guid.NewGuid().ToString("N"); var generator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var migrationBuilder = new IndentedStringBuilder(); var migrationMetadataBuilder = new IndentedStringBuilder(); generator.GenerateMigrationClass(@namespace, className, migration, migrationBuilder); generator.GenerateMigrationMetadataClass(@namespace, className, migration, typeof(DbContext), migrationMetadataBuilder); var migrationSource = migrationBuilder.ToString(); var migrationMetadataSource = migrationMetadataBuilder.ToString(); Assembly.Load("System.Linq.Expressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); var compiledAssembly = CodeGeneratorTestHelper.Compile( @namespace + ".dll", new[] { migrationSource, migrationMetadataSource }, new[] { "mscorlib", "System.Core", "System.Linq.Expressions", "System.Runtime", "EntityFramework.Core", "EntityFramework.Relational", "EntityFramework.Migrations" }); var compiledMigration = new MigrationInfo( (Migration)compiledAssembly.CreateInstance(@namespace + "." + className)); generator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); migrationBuilder = new IndentedStringBuilder(); migrationMetadataBuilder = new IndentedStringBuilder(); generator.GenerateMigrationClass(@namespace, className, compiledMigration, migrationBuilder); generator.GenerateMigrationMetadataClass(@namespace, className, compiledMigration, typeof(DbContext), migrationMetadataBuilder); Assert.Equal(migrationSource, migrationBuilder.ToString()); Assert.Equal(migrationMetadataSource, migrationMetadataBuilder.ToString()); }
public void Generate_migration_class() { var upgradeOperations = new[] { new AddColumnOperation("dbo.MyTable", new Column("Foo", typeof(int))), new AddColumnOperation("dbo.MyTable", new Column("Bar", typeof(int))) }; var downgradeOperations = new[] { new DropColumnOperation("dbo.MyTable", "Foo"), new DropColumnOperation("dbo.MyTable", "Bar") }; var migration = new MigrationMetadata("000000000000001_Name") { UpgradeOperations = upgradeOperations, DowngradeOperations = downgradeOperations }; var codeGenerator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var stringBuilder = new IndentedStringBuilder(); codeGenerator.GenerateMigrationClass("MyNamespace", "MyClass", migration, stringBuilder); Assert.Equal( @"using Microsoft.Data.Entity.Migrations; using Microsoft.Data.Entity.Migrations.Builders; using System; namespace MyNamespace { public partial class MyClass : Migration { public override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn(""dbo.MyTable"", ""Foo"", c => c.Int()); migrationBuilder.AddColumn(""dbo.MyTable"", ""Bar"", c => c.Int()); } public override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn(""dbo.MyTable"", ""Foo""); migrationBuilder.DropColumn(""dbo.MyTable"", ""Bar""); } } }", stringBuilder.ToString()); }