/// <summary> /// Finds the navigation source that a navigation property targets. /// </summary> /// <param name="navigationProperty">The navigation property.</param> /// <param name="bindingPath">The binding path of the navigation property.</param> /// <returns>The navigation source that the navigation property targets</returns> public virtual IEdmNavigationSource FindNavigationTarget(IEdmNavigationProperty navigationProperty, IEdmPathExpression bindingPath) { EdmUtil.CheckArgumentNull(navigationProperty, "navigationProperty"); bindingPath = bindingPath ?? new EdmPathExpression(navigationProperty.Name); Dictionary <string, IEdmNavigationPropertyBinding> result = EdmUtil.DictionarySafeGet(this.navigationPropertyMappings, navigationProperty); if (result != null) { IEdmNavigationPropertyBinding binding = EdmUtil.DictionarySafeGet(result, bindingPath.Path); { if (binding != null) { return(binding.Target); } } } if (navigationProperty.ContainsTarget) { return(AddNavigationPropertyBinding( navigationProperty, new EdmContainedEntitySet(this, navigationProperty, bindingPath), bindingPath) .Target); } return(EdmUtil.DictionaryGetOrUpdate( this.unknownNavigationPropertyCache, navigationProperty, navProperty => new EdmUnknownEntitySet(this, navProperty))); }
/// <summary> /// Finds the bindings of the navigation property. /// </summary> /// <param name="navigationProperty">The navigation property.</param> /// <returns>The list of bindings for current navigation property.</returns> public virtual IEnumerable <IEdmNavigationPropertyBinding> FindNavigationPropertyBindings(IEdmNavigationProperty navigationProperty) { EdmUtil.CheckArgumentNull(navigationProperty, "navigationProperty"); Dictionary <string, IEdmNavigationPropertyBinding> result = EdmUtil.DictionarySafeGet(this.navigationPropertyMappings, navigationProperty); if (result != null) { return(result.Select(item => item.Value)); } return(null); }