private void RemoveNavigation(
            PropertyInfo navigationProperty,
            IConventionEntityType declaringEntityType,
            List <PropertyInfo> toRemoveFrom)
        {
            var navigationPropertyName = navigationProperty.GetSimpleMemberName();
            var existingNavigation     = declaringEntityType.FindDeclaredNavigation(navigationPropertyName);

            if (existingNavigation != null)
            {
                if (existingNavigation.ForeignKey.DeclaringEntityType.Builder
                    .HasNoRelationship(existingNavigation.ForeignKey)
                    == null &&
                    existingNavigation.ForeignKey.Builder.HasNavigation(
                        (string?)null, existingNavigation.IsOnDependent)
                    == null)
                {
                    // Navigations of higher configuration source are not ambiguous
                    toRemoveFrom.Remove(navigationProperty);
                }
            }
            else
            {
                var skipNavigation = declaringEntityType.FindDeclaredSkipNavigation(navigationPropertyName);
                if (skipNavigation != null)
                {
                    var inverse = skipNavigation.Inverse;
                    if (declaringEntityType.Builder.HasNoSkipNavigation(skipNavigation) == null)
                    {
                        // Navigations of higher configuration source are not ambiguous
                        toRemoveFrom.Remove(navigationProperty);
                    }
                    else if (inverse?.IsInModel == true)
                    {
                        inverse.DeclaringEntityType.Builder.HasNoSkipNavigation(inverse);
                    }
                }
            }
        }