private bool TryFindNavigationProperties( Type type, StructuralType cspaceType, StructuralType ospaceType, IEnumerable <PropertyInfo> clrProperties, List <Action> referenceResolutionListForCurrentType) { List <KeyValuePair <NavigationProperty, PropertyInfo> > keyValuePairList = new List <KeyValuePair <NavigationProperty, PropertyInfo> >(); foreach (NavigationProperty declaredOnlyMember in cspaceType.GetDeclaredOnlyMembers <NavigationProperty>()) { NavigationProperty cspaceProperty = declaredOnlyMember; PropertyInfo propertyInfo = clrProperties.FirstOrDefault <PropertyInfo>((Func <PropertyInfo, bool>)(p => OSpaceTypeFactory.NonPrimitiveMemberMatchesByConvention(p, (EdmMember)cspaceProperty))); if (propertyInfo != (PropertyInfo)null) { bool flag = cspaceProperty.ToEndMember.RelationshipMultiplicity != RelationshipMultiplicity.Many; if (propertyInfo.CanRead && (!flag || propertyInfo.CanWriteExtended())) { keyValuePairList.Add(new KeyValuePair <NavigationProperty, PropertyInfo>(cspaceProperty, propertyInfo)); } } else { this.LogLoadMessage(Strings.Validator_OSpace_Convention_MissingRequiredProperty((object)cspaceProperty.Name, (object)type.FullName), (EdmType)cspaceType); return(false); } } foreach (KeyValuePair <NavigationProperty, PropertyInfo> keyValuePair in keyValuePairList) { this.TrackClosure(keyValuePair.Value.PropertyType); StructuralType ct = cspaceType; StructuralType ot = ospaceType; NavigationProperty cp = keyValuePair.Key; referenceResolutionListForCurrentType.Add((Action)(() => this.CreateAndAddNavigationProperty(ct, ot, cp))); } return(true); }