diff --git a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs index eed9d50f07d..869eaef22f1 100644 --- a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs +++ b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs @@ -135,6 +135,12 @@ public static void SetTableName(this IMutableEntityType entityType, string? name /// The database schema that contains the mapped table. public static string? GetSchema(this IReadOnlyEntityType entityType) { + if (entityType.GetTableName() == null + && !(AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue26651", out var enabled) && enabled)) + { + return null; + } + var schemaAnnotation = entityType.FindAnnotation(RelationalAnnotationNames.Schema); if (schemaAnnotation != null) { diff --git a/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs b/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs index df48756c696..cc2a489890e 100644 --- a/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs +++ b/test/EFCore.Design.Tests/Migrations/ModelSnapshotSqlServerTest.cs @@ -564,6 +564,37 @@ public void Views_are_stored_in_the_model_snapshot() o => Assert.Equal("EntityWithOneProperty", o.GetEntityTypes().Single().GetViewName())); } + [ConditionalFact] + public void Unmapped_entity_types_are_stored_in_the_model_snapshot() + { + Test( + builder => { + builder.HasDefaultSchema("default"); + builder.Entity().Ignore(e => e.EntityWithTwoProperties).ToTable((string)null); + }, + AddBoilerPlate(@" + modelBuilder + .HasDefaultSchema(""default"") + .HasAnnotation(""Relational:MaxIdentifierLength"", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity(""Microsoft.EntityFrameworkCore.Migrations.ModelSnapshotSqlServerTest+EntityWithOneProperty"", b => + { + b.Property(""Id"") + .ValueGeneratedOnAdd() + .HasColumnType(""int""); + + b.HasKey(""Id""); + + b.ToTable((string)null); + });"), + o => { + Assert.Null(o.GetEntityTypes().Single().GetTableName()); + Assert.Null(o.GetEntityTypes().Single().GetSchema()); + }); + } + private class TestKeylessType { public string Something { get; set; } diff --git a/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs b/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs index 403d10250b3..1b240ecd7c4 100644 --- a/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs +++ b/test/EFCore.Relational.Specification.Tests/Migrations/MigrationsTestBase.cs @@ -101,7 +101,9 @@ await Test( Assert.Equal("People", peopleTable.Name); if (AssertSchemaNames) + { Assert.Equal("dbo2", peopleTable.Schema); + } Assert.Collection( peopleTable.Columns.OrderBy(c => c.Name),