public void Generate_migration_metadata_class() { var model = new Metadata.Model(); var entityType = new EntityType("Entity"); entityType.SetKey(entityType.AddProperty("Id", typeof(int))); model.AddEntityType(entityType); var migration = new MigrationMetadata("Name", "Timestamp") { TargetModel = model }; var codeGenerator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var stringBuilder = new IndentedStringBuilder(); codeGenerator.GenerateMigrationMetadataClass("MyNamespace", "MyClass", migration, stringBuilder); Assert.Equal( @"using Microsoft.Data.Entity.Metadata; using Microsoft.Data.Entity.Migrations.Infrastructure; using System; namespace MyNamespace { public partial class MyClass : IMigrationMetadata { string IMigrationMetadata.Name { get { return ""Name""; } } string IMigrationMetadata.Timestamp { get { return ""Timestamp""; } } IModel IMigrationMetadata.TargetModel { get { var builder = new ModelBuilder(); builder.Entity(""Entity"") .Properties(ps => ps.Property<int>(""Id"")) .Key(""Id""); return builder.Model; } } } }", stringBuilder.ToString()); }
public void Generate_migration_metadata_class() { var model = new Model(); var entityType = new EntityType("Entity"); entityType.GetOrSetPrimaryKey(entityType.GetOrAddProperty("Id", typeof(int), shadowProperty: true)); model.AddEntityType(entityType); var migration = new MigrationMetadata("000000000000001_Name", typeof(MyContext)) { TargetModel = model }; var codeGenerator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var stringBuilder = new IndentedStringBuilder(); codeGenerator.GenerateMigrationMetadataClass("MyNamespace", "MyClass", migration, stringBuilder); Assert.Equal( @"using Microsoft.Data.Entity.Commands.Tests.Migrations; using Microsoft.Data.Entity.Metadata; using Microsoft.Data.Entity.Migrations.Infrastructure; using System; namespace MyNamespace { [ContextType(typeof(CSharpMigrationCodeGeneratorTest.MyContext))] public partial class MyClass : IMigrationMetadata { string IMigrationMetadata.MigrationId { get { return ""000000000000001_Name""; } } IModel IMigrationMetadata.TargetModel { get { var builder = new BasicModelBuilder(); builder.Entity(""Entity"", b => { b.Property<int>(""Id""); b.Key(""Id""); }); return builder.Model; } } } }", 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_metadata_class() { var model = new Model(); var entityType = new EntityType("Entity"); entityType.SetKey(entityType.AddProperty("Id", typeof(int))); model.AddEntityType(entityType); var migration = new MigrationMetadata("000000000000001_Name") { TargetModel = model }; var codeGenerator = new CSharpMigrationCodeGenerator(new CSharpModelCodeGenerator()); var stringBuilder = new IndentedStringBuilder(); codeGenerator.GenerateMigrationMetadataClass("MyNamespace", "MyClass", migration, stringBuilder); Assert.Equal( @"using Microsoft.Data.Entity.Metadata; using Microsoft.Data.Entity.Migrations.Infrastructure; using System; namespace MyNamespace { public partial class MyClass : IMigrationMetadata { string IMigrationMetadata.MigrationId { get { return ""000000000000001_Name""; } } IModel IMigrationMetadata.TargetModel { get { var builder = new ModelBuilder(); builder.Entity(""Entity"", b => { b.Property<int>(""Id""); b.Key(""Id""); }); return builder.Model; } } } }", stringBuilder.ToString()); }