Skip to content

Commit

Permalink
Add quirk mode for 23377 and 23354
Browse files Browse the repository at this point in the history
  • Loading branch information
AndriySvyryd committed Nov 24, 2020
1 parent b227b1a commit f26e828
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,9 @@ public static string GetDefaultSchema([NotNull] this IEntityType entityType)
}
else
{
var useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23377", out var enabled) && enabled;
var skipReferencingTypes = entityType.GetForeignKeys().SelectMany(fk => fk.GetReferencingSkipNavigations())
.Where(n => !n.IsOnDependent && n.DeclaringEntityType != entityType)
.Where(n => !n.IsOnDependent && (n.DeclaringEntityType != entityType || useOldBehavior))
.ToList();
var skipNavigationSchema = skipReferencingTypes.FirstOrDefault()?.DeclaringEntityType.GetSchema();
if (skipNavigationSchema != null
Expand Down
Original file line number Diff line number Diff line change
@@ -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.Linq;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
Expand Down Expand Up @@ -58,10 +59,11 @@ protected override DeleteBehavior GetTargetDeleteBehavior(IConventionForeignKey
return deleteBehavior;
}

var useOldBehavior = AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23354", out var enabled) && enabled;
if (selfReferencingSkipNavigation
== selfReferencingSkipNavigation.DeclaringEntityType.GetDeclaredSkipNavigations()
.First(s => s == selfReferencingSkipNavigation || s == selfReferencingSkipNavigation.Inverse)
&& selfReferencingSkipNavigation != selfReferencingSkipNavigation.Inverse)
&& (selfReferencingSkipNavigation != selfReferencingSkipNavigation.Inverse || useOldBehavior))
{
selfReferencingSkipNavigation.Inverse.ForeignKey?.Builder.OnDelete(
GetTargetDeleteBehavior(selfReferencingSkipNavigation.Inverse.ForeignKey));
Expand Down
3 changes: 2 additions & 1 deletion src/EFCore/Metadata/Conventions/KeyDiscoveryConvention.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ protected virtual void TryConfigurePrimaryKey([NotNull] IConventionEntityTypeBui
var manyToManyForeignKeys = entityType.GetForeignKeys()
.Where(fk => fk.GetReferencingSkipNavigations().Any(n => n.IsCollection)).ToList();
if (manyToManyForeignKeys.Count == 2
&& !manyToManyForeignKeys.Any(fk => fk.PrincipalEntityType == entityType))
&& (!manyToManyForeignKeys.Any(fk => fk.PrincipalEntityType == entityType)
|| (AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue23377", out var enabled) && enabled)))
{
keyProperties.AddRange(manyToManyForeignKeys.SelectMany(fk => fk.Properties));
}
Expand Down

0 comments on commit f26e828

Please sign in to comment.