diff --git a/src/EFCore/Metadata/Conventions/InversePropertyAttributeConvention.cs b/src/EFCore/Metadata/Conventions/InversePropertyAttributeConvention.cs index 50cc2bcae0b..0da3a9978d7 100644 --- a/src/EFCore/Metadata/Conventions/InversePropertyAttributeConvention.cs +++ b/src/EFCore/Metadata/Conventions/InversePropertyAttributeConvention.cs @@ -76,14 +76,16 @@ private void Process( var entityType = entityTypeBuilder.Metadata; var targetEntityType = targetEntityTypeBuilder.Metadata; var targetClrType = targetEntityType.ClrType; + var navigationCandidates = Dependencies.MemberClassifier.GetNavigationCandidates(targetEntityType); var inverseNavigationPropertyInfo = targetEntityType.GetRuntimeProperties().Values - .FirstOrDefault(p => string.Equals(p.GetSimpleMemberName(), attribute.Property, StringComparison.Ordinal)) + .FirstOrDefault(p => string.Equals(p.GetSimpleMemberName(), attribute.Property, StringComparison.Ordinal) + && navigationCandidates.ContainsKey(p)) ?? targetEntityType.GetRuntimeProperties().Values - .FirstOrDefault(p => string.Equals(p.GetSimpleMemberName(), attribute.Property, StringComparison.OrdinalIgnoreCase)); + .FirstOrDefault(p => string.Equals(p.GetSimpleMemberName(), attribute.Property, StringComparison.OrdinalIgnoreCase) + && navigationCandidates.ContainsKey(p)); if (inverseNavigationPropertyInfo == null - || !Dependencies.MemberClassifier.GetNavigationCandidates(targetEntityType)[inverseNavigationPropertyInfo] - .Type.IsAssignableFrom(entityType.ClrType)) + || !navigationCandidates[inverseNavigationPropertyInfo].Type.IsAssignableFrom(entityType.ClrType)) { throw new InvalidOperationException( CoreStrings.InvalidNavigationWithInverseProperty( diff --git a/test/EFCore.Tests/Metadata/Conventions/NavigationAttributeConventionTest.cs b/test/EFCore.Tests/Metadata/Conventions/NavigationAttributeConventionTest.cs index 126640c8873..f90bc3670b2 100644 --- a/test/EFCore.Tests/Metadata/Conventions/NavigationAttributeConventionTest.cs +++ b/test/EFCore.Tests/Metadata/Conventions/NavigationAttributeConventionTest.cs @@ -1120,7 +1120,12 @@ private class Post public ICollection Blogs { get; set; } } - private class Principal + private interface IPrincipal + { + MismatchedInverseProperty MismatchedInverseProperty { get; set; } + } + + private class Principal : IPrincipal { public static readonly PropertyInfo DependentIdProperty = typeof(Principal).GetProperty("DependentId"); @@ -1139,6 +1144,8 @@ private class Principal [InverseProperty("AnotherPrincipal")] public MismatchedInverseProperty MismatchedInverseProperty { get; set; } + + MismatchedInverseProperty IPrincipal.MismatchedInverseProperty { get; set; } } private class Dependent