public void Forwards_to_instances_of_a_different_type() { using (var directory = new TempDirectory()) { var source = new BuildSource { TargetDir = directory.Path, Sources = { @" using System; namespace Microsoft.EntityFrameworkCore.Design.Internal { // NOTE: This interface will have a different identity than the one above internal interface IMagic { int Number { get; } } internal class Magic : MarshalByRefObject, IMagic { public int Number { get { return 7; } } } }" } }; var build = source.Build(); var domain = AppDomain.CreateDomain( "ForwardingProxyTest", null, new AppDomainSetup { ApplicationBase = build.TargetDir }); try { var target = domain.CreateInstanceAndUnwrap( build.TargetName, "Microsoft.EntityFrameworkCore.Design.Internal.Magic"); var forwardingProxy = new ForwardingProxy<IMagic>(target); var transparentProxy = forwardingProxy.GetTransparentProxy(); Assert.Equal(7, transparentProxy.Number); } finally { AppDomain.Unload(domain); } } }
public void Migrations_compile() { var codeHelper = new CSharpHelper(); var generator = new CSharpMigrationsGenerator( codeHelper, new CSharpMigrationOperationGenerator(codeHelper), new CSharpSnapshotGenerator(codeHelper)); var migrationCode = generator.GenerateMigration( "MyNamespace", "MyMigration", new[] { new SqlOperation { Sql = "-- TEST", ["Some:EnumValue"] = RegexOptions.Multiline } }, new MigrationOperation[0]); Assert.Equal( @"using System; using System.Collections.Generic; using Microsoft.EntityFrameworkCore.Migrations; using System.Text.RegularExpressions; namespace MyNamespace { public partial class MyMigration : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql(""-- TEST"") .Annotation(""Some:EnumValue"", RegexOptions.Multiline); } protected override void Down(MigrationBuilder migrationBuilder) { } } } ", migrationCode); var migrationMetadataCode = generator.GenerateMetadata( "MyNamespace", typeof(MyContext), "MyMigration", "20150511161616_MyMigration", new Model { ["Some:EnumValue"] = RegexOptions.Multiline }); Assert.Equal( @"using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Tools.Core.FunctionalTests.Migrations; using System.Text.RegularExpressions; namespace MyNamespace { [DbContext(typeof(CodeCompilationTest.MyContext))] [Migration(""20150511161616_MyMigration"")] partial class MyMigration { protected override void BuildTargetModel(ModelBuilder modelBuilder) { modelBuilder .HasAnnotation(""Some:EnumValue"", RegexOptions.Multiline); } } } ", migrationMetadataCode); var build = new BuildSource { References = { #if NETCOREAPP1_0 BuildReference.ByName("System.Text.RegularExpressions"), #else BuildReference.ByName("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), BuildReference.ByName("System.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), #endif BuildReference.ByName("Microsoft.EntityFrameworkCore.Tools.Core.FunctionalTests", depContextAssembly: GetType().GetTypeInfo().Assembly), BuildReference.ByName("Microsoft.EntityFrameworkCore"), BuildReference.ByName("Microsoft.EntityFrameworkCore.Relational") }, Sources = { migrationCode, migrationMetadataCode } }; var assembly = build.BuildInMemory(); var migrationType = assembly.GetType("MyNamespace.MyMigration", throwOnError: true, ignoreCase: false); var contextTypeAttribute = migrationType.GetTypeInfo().GetCustomAttribute<DbContextAttribute>(); Assert.NotNull(contextTypeAttribute); Assert.Equal(typeof(MyContext), contextTypeAttribute.ContextType); var migration = (Migration)Activator.CreateInstance(migrationType); Assert.Equal("20150511161616_MyMigration", migration.GetId()); Assert.Equal(1, migration.UpOperations.Count); Assert.Empty(migration.DownOperations); Assert.Empty(migration.TargetModel.GetEntityTypes()); }
public void Snapshots_compile() { var codeHelper = new CSharpHelper(); var generator = new CSharpMigrationsGenerator( codeHelper, new CSharpMigrationOperationGenerator(codeHelper), new CSharpSnapshotGenerator(codeHelper)); var modelSnapshotCode = generator.GenerateSnapshot( "MyNamespace", typeof(MyContext), "MySnapshot", new Model { ["Some:EnumValue"] = RegexOptions.Multiline }); Assert.Equal(@"using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Tools.Core.FunctionalTests.Migrations; using System.Text.RegularExpressions; namespace MyNamespace { [DbContext(typeof(CodeCompilationTest.MyContext))] partial class MySnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { modelBuilder .HasAnnotation(""Some:EnumValue"", RegexOptions.Multiline); } } } ", modelSnapshotCode); var build = new BuildSource { References = { #if NETCOREAPP1_0 BuildReference.ByName("System.Runtime"), BuildReference.ByName("System.Text.RegularExpressions"), #else BuildReference.ByName("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), BuildReference.ByName("System.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), #endif BuildReference.ByName("Microsoft.EntityFrameworkCore.Tools.Core.FunctionalTests", depContextAssembly: GetType().GetTypeInfo().Assembly), BuildReference.ByName("Microsoft.EntityFrameworkCore"), BuildReference.ByName("Microsoft.EntityFrameworkCore.Relational") }, Sources = { modelSnapshotCode } }; var assembly = build.BuildInMemory(); var snapshotType = assembly.GetType("MyNamespace.MySnapshot", throwOnError: true, ignoreCase: false); var contextTypeAttribute = snapshotType.GetTypeInfo().GetCustomAttribute<DbContextAttribute>(); Assert.NotNull(contextTypeAttribute); Assert.Equal(typeof(MyContext), contextTypeAttribute.ContextType); var snapshot = (ModelSnapshot)Activator.CreateInstance(snapshotType); Assert.Empty(snapshot.Model.GetEntityTypes()); }
protected virtual void AssertCompile(FileSet fileSet) { var fileContents = fileSet.Files.Select(fileSet.Contents).ToList(); var source = new BuildSource { Sources = fileContents }; foreach (var r in References) { source.References.Add(r); } source.BuildInMemory(); }
private ModelSnapshot CompileModelSnapshot(string modelSnapshotCode, string modelSnapshotTypeName) { var build = new BuildSource { References = { #if NETCOREAPP1_0 BuildReference.ByName("System.Runtime"), BuildReference.ByName("System.Text.RegularExpressions"), #else BuildReference.ByName("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"), BuildReference.ByName("System.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), #endif BuildReference.ByName("Microsoft.EntityFrameworkCore.Tools.Core.FunctionalTests", depContextAssembly: GetType().GetTypeInfo().Assembly), BuildReference.ByName("Microsoft.EntityFrameworkCore"), BuildReference.ByName("Microsoft.EntityFrameworkCore.Relational") }, Sources = { modelSnapshotCode } }; var assembly = build.BuildInMemory(); var snapshotType = assembly.GetType(modelSnapshotTypeName, throwOnError: true, ignoreCase: false); var contextTypeAttribute = snapshotType.GetTypeInfo().GetCustomAttribute<DbContextAttribute>(); Assert.NotNull(contextTypeAttribute); Assert.Equal(typeof(MyContext), contextTypeAttribute.ContextType); return (ModelSnapshot)Activator.CreateInstance(snapshotType); }