From 05d1ddd616fc159d76e6ee52ae9b4994d6b3f340 Mon Sep 17 00:00:00 2001 From: Andriy Svyryd Date: Wed, 28 Oct 2020 16:36:54 -0700 Subject: [PATCH] Add quirk mode for #23092 --- .../Metadata/Conventions/SqlServerIndexConvention.cs | 5 ++++- .../Conventions/ForeignKeyPropertyDiscoveryConvention.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs index d2098a6061f..4ae01369054 100644 --- a/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs +++ b/src/EFCore.SqlServer/Metadata/Conventions/SqlServerIndexConvention.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -201,12 +202,14 @@ private List GetNullableColumns(IIndex index) return null; } + var useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23092_2", out var isEnabled) && isEnabled; var nullableColumns = new List(); var table = StoreObjectIdentifier.Table(tableName, index.DeclaringEntityType.GetSchema()); foreach (var property in index.Properties) { var columnName = property.GetColumnName(table); - if (columnName == null) + if (columnName == null + && !useOldBehavior) { return null; } diff --git a/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs b/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs index df708483000..d1287374a88 100644 --- a/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs +++ b/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs @@ -129,12 +129,15 @@ private IConventionForeignKeyBuilder DiscoverProperties( IConventionForeignKeyBuilder relationshipBuilder, IConventionContext context) { + var useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23092_1", out var isEnabled) && isEnabled; + var foreignKey = relationshipBuilder.Metadata; var foreignKeyProperties = FindCandidateForeignKeyProperties(relationshipBuilder.Metadata, onDependent: true); var propertiesConfigurationSource = foreignKey.GetPropertiesConfigurationSource(); if (!ConfigurationSource.Convention.OverridesStrictly(propertiesConfigurationSource) && (propertiesConfigurationSource != ConfigurationSource.Convention - || (foreignKey.Properties.All(p => !p.IsImplicitlyCreated()) + || (!useOldBehavior + && foreignKey.Properties.All(p => !p.IsImplicitlyCreated()) && (foreignKeyProperties == null || !foreignKey.Properties.SequenceEqual(foreignKeyProperties))))) {