protected override async Task <Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary <string, object> parameters) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, true) .ConfigureAwait(false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer) as IEdmAction; var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action).ConfigureAwait(false); await parameterWriter.WriteStartAsync().ConfigureAwait(false); foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (operationParameter == null) { throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); } await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value).ConfigureAwait(false); } await parameterWriter.WriteEndAsync().ConfigureAwait(false); return(IsBatch ? null : await message.GetStreamAsync().ConfigureAwait(false)); } }
protected override async Task <Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary <string, object> parameters) { #if SILVERLIGHT IODataRequestMessage #else IODataRequestMessageAsync #endif message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, true) .ConfigureAwait(false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(ODataFormat.Json), _model)) { var action = _model.SchemaElements .Where(x => x.SchemaElementKind == EdmSchemaElementKind.EntityContainer) .SelectMany(x => (x as IEdmEntityContainer).FunctionImports()) .BestMatch(x => x.Name, actionName, _session.Pluralizer); #if SILVERLIGHT var parameterWriter = messageWriter.CreateODataParameterWriter(action); parameterWriter.WriteStart(); #else var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action).ConfigureAwait(false); await parameterWriter.WriteStartAsync().ConfigureAwait(false); #endif foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (operationParameter == null) { throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); } #if SILVERLIGHT WriteOperationParameter(parameterWriter, operationParameter, parameter.Key, parameter.Value); #else await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value).ConfigureAwait(false); #endif } #if SILVERLIGHT parameterWriter.WriteEnd(); #else await parameterWriter.WriteEndAsync().ConfigureAwait(false); #endif if (IsBatch) { return(null); } #if SILVERLIGHT return(message.GetStream()); #else return(await message.GetStreamAsync().ConfigureAwait(false)); #endif } }
protected override async Task <Stream> WriteActionContentAsync(string method, string commandText, string actionName, string boundTypeName, IDictionary <string, object> parameters) { var message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, true).ConfigureAwait(false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { Func <IEdmOperationParameter, IEdmType, bool> typeMatch = (parameter, baseType) => parameter == null || parameter.Type.Definition == baseType || parameter.Type.Definition.TypeKind == EdmTypeKind.Collection && (parameter.Type.Definition as IEdmCollectionType).ElementType.Definition == baseType; var action = boundTypeName == null ? _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Settings.NameMatchResolver) as IEdmAction : _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action && typeMatch( ((IEdmAction)x).Parameters.FirstOrDefault(p => p.Name == "bindingParameter"), _model.FindDeclaredType(boundTypeName)), x => x.Name, actionName, _session.Settings.NameMatchResolver) as IEdmAction; var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action).ConfigureAwait(false); await parameterWriter.WriteStartAsync().ConfigureAwait(false); foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Settings.NameMatchResolver); if (operationParameter == null) { throw new UnresolvableObjectException(parameter.Key, $"Parameter [{parameter.Key}] not found for action [{actionName}]"); } await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value).ConfigureAwait(false); } await parameterWriter.WriteEndAsync().ConfigureAwait(false); return(IsBatch ? null : await message.GetStreamAsync().ConfigureAwait(false)); } }
protected override async Task <Stream> WriteActionContentAsync(string method, string commandText, string actionName, string boundTypeName, IDictionary <string, object> parameters) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, true).ConfigureAwait(false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(ODataFormat.Json), _model)) { var action = _model.SchemaElements .Where(x => x.SchemaElementKind == EdmSchemaElementKind.EntityContainer) .SelectMany(x => (x as IEdmEntityContainer).FunctionImports()) .BestMatch(x => x.Name, actionName, _session.Settings.NameMatchResolver); var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action).ConfigureAwait(false); await parameterWriter.WriteStartAsync().ConfigureAwait(false); foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Settings.NameMatchResolver); if (operationParameter == null) { throw new UnresolvableObjectException(parameter.Key, $"Parameter [{parameter.Key}] not found for action [{actionName}]"); } await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value).ConfigureAwait(false); } await parameterWriter.WriteEndAsync().ConfigureAwait(false); if (IsBatch) { return(null); } return(await message.GetStreamAsync().ConfigureAwait(false)); } }
protected override async Task <Stream> WriteActionContentAsync(string actionName, IDictionary <string, object> parameters) { var message = new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer); var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action as IEdmAction); await parameterWriter.WriteStartAsync(); foreach (var parameter in parameters) { if (!(parameter.Value is string) && parameter.Value is IEnumerable) { var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key); await collectionWriter.WriteStartAsync(new ODataCollectionStart()); foreach (var item in parameter.Value as IEnumerable) { await collectionWriter.WriteItemAsync(item); } await collectionWriter.WriteEndAsync(); } else { await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value); } } await parameterWriter.WriteEndAsync(); return(await message.GetStreamAsync()); } }
protected override async Task<Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary<string, object> parameters) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, true) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer) as IEdmAction; var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action); await parameterWriter.WriteStartAsync(); foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (operationParameter == null) throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value); } await parameterWriter.WriteEndAsync(); return IsBatch ? null : await message.GetStreamAsync(); } }
protected override async Task<Stream> WriteActionContentAsync(string actionName, IDictionary<string, object> parameters) { var message = new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer); var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action as IEdmAction); await parameterWriter.WriteStartAsync(); foreach (var parameter in parameters) { if (!(parameter.Value is string) && parameter.Value is IEnumerable) { var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key); await collectionWriter.WriteStartAsync(new ODataCollectionStart()); foreach (var item in parameter.Value as IEnumerable) { await collectionWriter.WriteItemAsync(item); } await collectionWriter.WriteEndAsync(); } else { await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value); } } await parameterWriter.WriteEndAsync(); return await message.GetStreamAsync(); } }
protected override async Task<Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary<string, object> parameters) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer) as IEdmAction; var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action); await parameterWriter.WriteStartAsync(); foreach (var parameter in parameters) { var actionParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (actionParameter == null) throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); if (actionParameter.Type.Definition.TypeKind == EdmTypeKind.Collection) { var collectionType = actionParameter.Type.Definition as IEdmCollectionType; var elementType = collectionType.ElementType; if (elementType.Definition.TypeKind == EdmTypeKind.Entity) { var feedWriter = await parameterWriter.CreateFeedWriterAsync(parameter.Key); var feed = new ODataFeed(); await feedWriter.WriteStartAsync(feed); foreach (var item in parameter.Value as IEnumerable) { var entry = CreateODataEntry(elementType.Definition.FullTypeName(), item.ToDictionary()); await feedWriter.WriteStartAsync(entry); await feedWriter.WriteEndAsync(); } await feedWriter.WriteEndAsync(); } else { var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key); await collectionWriter.WriteStartAsync(new ODataCollectionStart()); foreach (var item in parameter.Value as IEnumerable) { await collectionWriter.WriteItemAsync(item); } await collectionWriter.WriteEndAsync(); } } else { await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value); } } await parameterWriter.WriteEndAsync(); return IsBatch ? null : await message.GetStreamAsync(); } }
protected override async Task<Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary<string, object> parameters) { #if SILVERLIGHT IODataRequestMessage #else IODataRequestMessageAsync #endif message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements .Where(x => x.SchemaElementKind == EdmSchemaElementKind.EntityContainer) .SelectMany(x => (x as IEdmEntityContainer).FunctionImports()) .BestMatch(x => x.Name, actionName, _session.Pluralizer); #if SILVERLIGHT var parameterWriter = messageWriter.CreateODataParameterWriter(action); parameterWriter.WriteStart(); #else var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action); await parameterWriter.WriteStartAsync(); #endif foreach (var parameter in parameters) { var operationParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (operationParameter == null) throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); #if SILVERLIGHT WriteOperationParameter(parameterWriter, operationParameter, parameter.Key, parameter.Value); #else await WriteOperationParameterAsync(parameterWriter, operationParameter, parameter.Key, parameter.Value); #endif } #if SILVERLIGHT parameterWriter.WriteEnd(); #else await parameterWriter.WriteEndAsync(); #endif if (IsBatch) return null; #if SILVERLIGHT return message.GetStream(); #else return await message.GetStreamAsync(); #endif } }
protected override async Task <Stream> WriteActionContentAsync(string method, string commandText, string actionName, IDictionary <string, object> parameters) { IODataRequestMessageAsync message = IsBatch ? await CreateBatchOperationMessageAsync(method, null, null, commandText, false) : new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(), _model)) { var action = _model.SchemaElements.BestMatch( x => x.SchemaElementKind == EdmSchemaElementKind.Action, x => x.Name, actionName, _session.Pluralizer) as IEdmAction; var parameterWriter = await messageWriter.CreateODataParameterWriterAsync(action); await parameterWriter.WriteStartAsync(); foreach (var parameter in parameters) { var actionParameter = action.Parameters.BestMatch(x => x.Name, parameter.Key, _session.Pluralizer); if (actionParameter == null) { throw new UnresolvableObjectException(parameter.Key, string.Format("Parameter [{0}] not found for action [{1}]", parameter.Key, actionName)); } if (actionParameter.Type.Definition.TypeKind == EdmTypeKind.Collection) { var collectionType = actionParameter.Type.Definition as IEdmCollectionType; var elementType = collectionType.ElementType; if (elementType.Definition.TypeKind == EdmTypeKind.Entity) { var feedWriter = await parameterWriter.CreateFeedWriterAsync(parameter.Key); var feed = new ODataFeed(); await feedWriter.WriteStartAsync(feed); foreach (var item in parameter.Value as IEnumerable) { var entry = CreateODataEntry(elementType.Definition.FullTypeName(), item.ToDictionary()); await feedWriter.WriteStartAsync(entry); await feedWriter.WriteEndAsync(); } await feedWriter.WriteEndAsync(); } else { var collectionWriter = await parameterWriter.CreateCollectionWriterAsync(parameter.Key); await collectionWriter.WriteStartAsync(new ODataCollectionStart()); foreach (var item in parameter.Value as IEnumerable) { await collectionWriter.WriteItemAsync(item); } await collectionWriter.WriteEndAsync(); } } else { await parameterWriter.WriteValueAsync(parameter.Key, parameter.Value); } } await parameterWriter.WriteEndAsync(); return(IsBatch ? null : await message.GetStreamAsync()); } }