From fe4f5e6797f520b086cca37c582eab442e7a149b Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Wed, 11 Nov 2020 16:52:07 -0800 Subject: [PATCH 1/2] Use default schema for view mappings Fixes #23274 --- .../RelationalEntityTypeExtensions.cs | 2 +- .../Internal/CSharpDbContextGeneratorTest.cs | 13 +++++-- .../RelationalMetadataExtensionsTest.cs | 36 +++++++++++++++++++ 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs index b82b4d3f821..3c09445f366 100644 --- a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs +++ b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs @@ -373,7 +373,7 @@ public static string GetDefaultViewSchema([NotNull] this IEntityType entityType) return ownership.PrincipalEntityType.GetViewSchema(); } - return null; + return GetViewName(entityType) != null ? entityType.Model.GetDefaultSchema() : null; } /// diff --git a/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs b/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs index 037f10cbffb..849e9f2c29a 100644 --- a/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs +++ b/test/EFCore.Design.Tests/Scaffolding/Internal/CSharpDbContextGeneratorTest.cs @@ -239,9 +239,16 @@ public void Views_work() Test( modelBuilder => modelBuilder.Entity("Vista").ToView("Vista"), new ModelCodeGenerationOptions { UseDataAnnotations = true }, - code => Assert.Contains(".ToView(\"Vista\")", code.ContextFile.Code), - model => Assert.NotNull( - model.FindEntityType("TestNamespace.Vista").FindAnnotation(RelationalAnnotationNames.ViewDefinitionSql))); + code => Assert.Contains("entity.ToView(\"Vista\");", code.ContextFile.Code), + model => { + var entityType = model.FindEntityType("TestNamespace.Vista"); + + Assert.NotNull(entityType.FindAnnotation(RelationalAnnotationNames.ViewDefinitionSql)); + Assert.Equal("Vista", entityType.GetViewName()); + Assert.Null(entityType.GetViewSchema()); + Assert.Null(entityType.GetTableName()); + Assert.Null(entityType.GetSchema()); + }); } [ConditionalFact] diff --git a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs index 81f1b0a7c9d..7e5544053c5 100644 --- a/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs +++ b/test/EFCore.Relational.Tests/Metadata/RelationalMetadataExtensionsTest.cs @@ -159,6 +159,42 @@ public void Gets_model_schema_if_schema_on_entity_type_not_set() Assert.Null(entityType.GetSchema()); } + [ConditionalFact] + public void Can_get_and_set_view_schema_name_on_entity_type() + { + var modelBuilder = new ModelBuilder(); + + var entityType = modelBuilder + .Entity() + .Metadata; + + Assert.Null(entityType.GetViewSchema()); + + modelBuilder.HasDefaultSchema("dbo"); + + Assert.Null(entityType.GetViewSchema()); + + entityType.SetViewName("CustomerView"); + + Assert.Equal("dbo", entityType.GetViewSchema()); + + entityType.SetViewSchema(null); + + Assert.Equal("dbo", entityType.GetViewSchema()); + + entityType.SetViewSchema("db0"); + + Assert.Equal("db0", entityType.GetViewSchema()); + + entityType.SetViewName(null); + + Assert.Equal("db0", entityType.GetViewSchema()); + + entityType.SetViewSchema(null); + + Assert.Null(entityType.GetViewSchema()); + } + [ConditionalFact] public void Can_get_and_set_column_type() { From 641d55319da40e7723c13d7453c26d0f43712737 Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Wed, 11 Nov 2020 17:08:14 -0800 Subject: [PATCH 2/2] Add quirk mode for #23274 --- .../Extensions/RelationalEntityTypeExtensions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs index 3c09445f366..7062fd28b60 100644 --- a/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs +++ b/src/EFCore.Relational/Extensions/RelationalEntityTypeExtensions.cs @@ -373,7 +373,9 @@ public static string GetDefaultViewSchema([NotNull] this IEntityType entityType) return ownership.PrincipalEntityType.GetViewSchema(); } - return GetViewName(entityType) != null ? entityType.Model.GetDefaultSchema() : null; + var useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23274", out var isEnabled) + && isEnabled; + return !useOldBehavior && GetViewName(entityType) != null ? entityType.Model.GetDefaultSchema() : null; } ///