/// <summary> /// Creates and adds a parameter to this function (as the last parameter). /// </summary> /// <param name="name">The name of the parameter being added.</param> /// <param name="type">The type of the parameter being added.</param> /// <param name="mode">Mode of the parameter.</param> /// <returns>Created parameter.</returns> public EdmFunctionParameter AddParameter(string name, IEdmTypeReference type, EdmFunctionParameterMode mode) { EdmFunctionParameter parameter = new EdmFunctionParameter(this, name, type, mode); this.parameters.Add(parameter); return(parameter); }
internal MetadataProviderEdmFunctionImport(MetadataProviderEdmModel model, MetadataProviderEdmEntityContainer container, OperationWrapper operation) { this.container = container; this.model = model; this.operation = operation; if (operation.Kind == OperationKind.Action) { this.isSideEffecting = true; this.isComposable = false; this.isBindable = this.operation.BindingParameter != null; } else { this.isComposable = false; this.isSideEffecting = true; this.isBindable = false; } ResourceSetPathExpression resultSetPathExpression = operation.ResultSetPathExpression; this.entitySetPath = (resultSetPathExpression == null) ? null : resultSetPathExpression.PathExpression; if (operation.Kind == OperationKind.ServiceOperation) { model.SetHttpMethod(this, operation.Method); } string mimeType = operation.MimeType; if (!string.IsNullOrEmpty(mimeType)) { model.SetMimeType(this, mimeType); } if (operation.OperationParameterBindingKind == OperationParameterBindingKind.Always) { model.SetIsAlwaysBindable(this, true); } ReadOnlyCollection<OperationParameter> parameters = operation.Parameters; if ((parameters != null) && (parameters.Count > 0)) { List<IEdmFunctionParameter> list = new List<IEdmFunctionParameter>(parameters.Count); foreach (OperationParameter parameter in parameters) { IEdmTypeReference typeReference = this.model.EnsureTypeReference(parameter.ParameterType, null); if (!typeReference.IsNullable && (this.model.GetEdmVersion() < DataServiceProtocolVersion.V3.ToVersion())) { typeReference = typeReference.Clone(true); } EdmFunctionParameter item = new EdmFunctionParameter(this, parameter.Name, typeReference, EdmFunctionParameterMode.In); list.Add(item); } this.parameters = new ReadOnlyCollection<IEdmFunctionParameter>(list); } }
private static void AddProcedures(this IEdmModel model, IEnumerable<ProcedureConfiguration> configurations, EdmEntityContainer container, Dictionary<Type, IEdmStructuredType> edmTypeMap, Dictionary<string, EdmEntitySet> edmEntitySetMap) { foreach (ProcedureConfiguration procedure in configurations) { switch (procedure.Kind) { case ProcedureKind.Action: ActionConfiguration action = procedure as ActionConfiguration; IEdmTypeReference returnReference = GetEdmTypeReference(edmTypeMap, action.ReturnType, nullable: true); IEdmExpression expression = GetEdmEntitySetExpression(edmEntitySetMap, action); EdmFunctionImport functionImport = new EdmFunctionImport(container, action.Name, returnReference, expression, action.IsSideEffecting, action.IsComposable, action.IsBindable); if (action.IsBindable) { model.SetIsAlwaysBindable(functionImport, action.IsAlwaysBindable); if (action.BindingParameter.TypeConfiguration.Kind == EdmTypeKind.Entity) { Func<EntityInstanceContext, Uri> actionFactory = action.GetActionLink(); if (actionFactory != null) { model.SetAnnotationValue<ActionLinkBuilder>(functionImport, new ActionLinkBuilder(actionFactory)); } } } foreach (ParameterConfiguration parameter in action.Parameters) { // TODO: http://aspnetwebstack.codeplex.com/workitem/417 bool isParameterOptional = EdmLibHelpers.IsNullable(parameter.TypeConfiguration.ClrType); IEdmTypeReference parameterTypeReference = GetEdmTypeReference(edmTypeMap, parameter.TypeConfiguration, nullable: isParameterOptional); EdmFunctionParameter functionParameter = new EdmFunctionParameter(functionImport, parameter.Name, parameterTypeReference, EdmFunctionParameterMode.In); functionImport.AddParameter(functionParameter); } container.AddElement(functionImport); break; case ProcedureKind.Function: Contract.Assert(false, "Functions are not supported."); break; case ProcedureKind.ServiceOperation: Contract.Assert(false, "ServiceOperations are not supported."); break; } } }
private static void AddProcedures(this EdmEntityContainer container, IEnumerable<ProcedureConfiguration> configurations, Dictionary<string, IEdmStructuredType> edmTypeMap, Dictionary<string, EdmEntitySet> edmEntitySetMap) { foreach (ProcedureConfiguration procedure in configurations) { switch (procedure.Kind) { case ProcedureKind.Action: ActionConfiguration action = procedure as ActionConfiguration; IEdmTypeReference returnReference = GetEdmTypeReference(edmTypeMap, action.ReturnType, nullable: true); IEdmExpression expression = GetEdmEntitySetExpression(edmEntitySetMap, action); EdmFunctionImport functionImport = new EdmFunctionImport(container, action.Name, returnReference, expression, action.IsSideEffecting, action.IsComposable, action.IsBindable); foreach (ParameterConfiguration parameter in action.Parameters) { // TODO: http://aspnetwebstack.codeplex.com/workitem/417 IEdmTypeReference parameterTypeReference = GetEdmTypeReference(edmTypeMap, parameter.TypeConfiguration, nullable: true); EdmFunctionParameter functionParameter = new EdmFunctionParameter(functionImport, parameter.Name, parameterTypeReference, EdmFunctionParameterMode.In); functionImport.AddParameter(functionParameter); } container.AddElement(functionImport); break; case ProcedureKind.Function: Contract.Assert(false, "Functions are not supported."); break; case ProcedureKind.ServiceOperation: Contract.Assert(false, "ServiceOperations are not supported."); break; } } }
/// <summary> /// Creates and adds a parameter to this function (as the last parameter). /// </summary> /// <param name="name">The name of the parameter being added.</param> /// <param name="type">The type of the parameter being added.</param> /// <param name="mode">Mode of the parameter.</param> /// <returns>Created parameter.</returns> public EdmFunctionParameter AddParameter(string name, IEdmTypeReference type, EdmFunctionParameterMode mode) { EdmFunctionParameter parameter = new EdmFunctionParameter(this, name, type, mode); this.parameters.Add(parameter); return parameter; }
public EdmFunctionParameter AddParameter(string name, IEdmTypeReference type) { EdmFunctionParameter edmFunctionParameter = new EdmFunctionParameter(this, name, type); this.parameters.Add(edmFunctionParameter); return edmFunctionParameter; }