diff --git a/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs b/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs
index 7fae234a577..beb97f2b1b1 100644
--- a/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs
+++ b/src/EFCore/Metadata/Conventions/ForeignKeyPropertyDiscoveryConvention.cs
@@ -50,6 +50,9 @@ public class ForeignKeyPropertyDiscoveryConvention :
IPropertyFieldChangedConvention,
IModelFinalizingConvention
{
+ private static readonly bool UseOldBehavior35110 =
+ AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue35110", out var enabled) && enabled;
+
///
/// Creates a new instance of .
///
@@ -81,7 +84,8 @@ private IConventionForeignKeyBuilder ProcessForeignKey(
IConventionContext context)
{
var shouldBeRequired = true;
- if (!relationshipBuilder.Metadata.IsOwnership)
+ if (!relationshipBuilder.Metadata.IsOwnership
+ || UseOldBehavior35110)
{
foreach (var property in relationshipBuilder.Metadata.Properties)
{
diff --git a/src/EFCore/Metadata/Internal/InternalEntityTypeBuilder.cs b/src/EFCore/Metadata/Internal/InternalEntityTypeBuilder.cs
index 58c607bc23e..53d96998377 100644
--- a/src/EFCore/Metadata/Internal/InternalEntityTypeBuilder.cs
+++ b/src/EFCore/Metadata/Internal/InternalEntityTypeBuilder.cs
@@ -15,6 +15,9 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Internal;
///
public class InternalEntityTypeBuilder : InternalTypeBaseBuilder, IConventionEntityTypeBuilder
{
+ private static readonly bool UseOldBehavior35110 =
+ AppContext.TryGetSwitch("Microsoft.EntityFrameworkCore.Issue35110", out var enabled) && enabled;
+
///
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
@@ -3171,8 +3174,12 @@ public static InternalIndexBuilder DetachIndex(Index indexToDetach)
+ "Owned types should only have ownership or ownee navigations point at it");
relationship = relationship.IsOwnership(true, configurationSource)
- ?.HasNavigations(inverse, navigation, configurationSource)
- ?.IsRequired(true, configurationSource);
+ ?.HasNavigations(inverse, navigation, configurationSource);
+
+ if (!UseOldBehavior35110)
+ {
+ relationship = relationship?.IsRequired(true, configurationSource);
+ }
relationship?.Metadata.UpdateConfigurationSource(configurationSource);
return relationship;
diff --git a/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs b/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
index 81349f24ddb..5ca1a781feb 100644
--- a/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
+++ b/test/EFCore.Relational.Tests/Migrations/Internal/MigrationsModelDifferTest.cs
@@ -1,7 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.Reflection.Emit;
using Microsoft.EntityFrameworkCore.TestUtilities.FakeProvider;
// ReSharper disable UnusedAutoPropertyAccessor.Local