public static IDictionary CreateLinks()

in src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiLinkGenerator.cs [31:101]


        public static IDictionary<string, OpenApiLink> CreateLinks(this ODataContext context,
            IEdmEntityType entityType, string entityName, string entityKind,
            IList<OpenApiParameter> parameters, string navPropOperationId = null)
        {
            IDictionary<string, OpenApiLink> links = new Dictionary<string, OpenApiLink>();

            Utils.CheckArgumentNull(context, nameof(context));
            Utils.CheckArgumentNull(entityType, nameof(entityType));
            Utils.CheckArgumentNullOrEmpty(entityName, nameof(entityName));
            Utils.CheckArgumentNullOrEmpty(entityKind, nameof(entityKind));
            Utils.CheckArgumentNull(parameters, nameof(parameters));

            List<string> pathKeyNames = new List<string>();

            // Fetch defined Id(s) from incoming parameters (if any)
            foreach (var parameter in parameters)
            {
                if (!string.IsNullOrEmpty(parameter.Description) &&
                    parameter.Description.ToLower().Contains("key"))
                {
                    pathKeyNames.Add(parameter.Name);
                }
            }

            foreach (IEdmNavigationProperty navProp in entityType.NavigationProperties())
            {
                string navPropName = navProp.Name;
                string operationId;
                string operationPrefix;

                switch (entityKind)
                {
                    case "Navigation": // just for contained navigations
                        operationPrefix = navPropOperationId;
                        break;
                    default: // EntitySet, Entity, Singleton
                        operationPrefix = entityName;
                        break;
                }

                if (navProp.TargetMultiplicity() == EdmMultiplicity.Many)
                {
                    operationId = operationPrefix + ".List" + Utils.UpperFirstChar(navPropName);
                }
                else
                {
                    operationId = operationPrefix + ".Get" + Utils.UpperFirstChar(navPropName);
                }

                OpenApiLink link = new OpenApiLink
                {
                    OperationId = operationId,
                    Parameters = new Dictionary<string, RuntimeExpressionAnyWrapper>()
                };

                if (pathKeyNames.Any())
                {
                    foreach (var pathKeyName in pathKeyNames)
                    {
                        link.Parameters[pathKeyName] = new RuntimeExpressionAnyWrapper
                        {
                            Any = new OpenApiString("$request.path." + pathKeyName)
                        };
                    }
                }

                links[navProp.Name] = link;
            }

            return links;
        }