public async ValueTask WriteOperationAsync(Stream stream, OeOperationMessage operation) { IODataResponseMessage responseMessage = new Infrastructure.OeInMemoryMessage(stream, operation.ContentType); using (var messageWriter = new ODataMessageWriter(responseMessage, _settings)) await WriteEntityAsync(operation.EntitySet, operation.Entry, stream).ConfigureAwait(false); }
private async Task WriteOperation(ODataBatchWriter writer, OeOperationMessage operation) { ODataBatchOperationResponseMessage operationMessage = await writer.CreateOperationResponseMessageAsync(operation.ContentId); operationMessage.SetHeader("Location", operation.RequestUrl.AbsoluteUri); operationMessage.SetHeader(ODataConstants.ContentTypeHeader, operation.ContentType); operationMessage.StatusCode = (int)operation.StatusCode; if (operation.StatusCode != HttpStatusCode.NoContent) { using (Stream stream = await operationMessage.GetStreamAsync()) await WriteEntity(operation.EntitySet, operation.Entry, stream); } }
private void WriteOperation(ODataBatchWriter writer, OeOperationMessage operation) { ODataBatchOperationResponseMessage operationMessage = writer.CreateOperationResponseMessage(operation.ContentId); operationMessage.SetHeader("Location", operation.RequestUrl.AbsoluteUri); operationMessage.SetHeader(ODataConstants.ContentTypeHeader, operation.ContentType); operationMessage.StatusCode = (int)operation.StatusCode; if (operation.StatusCode != HttpStatusCode.NoContent) { using (Stream stream = operationMessage.GetStream()) WriteEntity(stream, operation.EntityItem); } }
private static async Task <OeBatchFilterAttributeAttribute.BatchModelStateDictionary> GetModelStateAsync(HttpContext httpContext) { IEdmModel edmModel = httpContext.GetEdmModel(); Uri baseUri = UriHelper.GetBaseUri(httpContext.Request); Uri requestUri = UriHelper.GetUri(httpContext.Request); OeOperationMessage operation = await OeBatchMessage.CreateOperationMessageAsync(edmModel, baseUri, requestUri, httpContext.Request.Body, httpContext.Request.ContentType, httpContext.Request.Method, OeParser.ServiceProvider).ConfigureAwait(false); IEdmModel refModel = edmModel.GetEdmModel(operation.EntitySet.Container); OeDataAdapter dataAdapter = refModel.GetDataAdapter(operation.EntitySet.Container); Object dataContext = dataAdapter.CreateDataContext(); OeEntitySetAdapter entitySetAdapter = refModel.GetEntitySetAdapter(operation.EntitySet); Object entity = OeDataContext.CreateEntity(operation, entitySetAdapter.EntityType); var oeDataContext = new OeDataContext(entitySetAdapter, refModel, dataContext, operation); return(new OeBatchFilterAttributeAttribute.BatchModelStateDictionary(dataAdapter, oeDataContext, entity)); }
internal static Object CreateEntity(OeOperationMessage operation, Type clrEntityType) { if (operation.Method == ODataConstants.MethodPatch) { var properties = new Dictionary <String, Object>(); foreach (ODataProperty odataProperty in operation.Entry.Properties) { PropertyInfo?propertyInfo = clrEntityType.GetProperty(odataProperty.Name); if (propertyInfo == null) { throw new InvalidOperationException("Not found property " + odataProperty.Name + " in type " + clrEntityType.FullName); } properties[odataProperty.Name] = OeEdmClrHelper.GetClrValue(propertyInfo.PropertyType, odataProperty.Value); } return(properties); } return(OeEdmClrHelper.CreateEntity(clrEntityType, operation.Entry)); }
public void OnActionExecuted(ActionExecutedContext context) { if (!(context.ModelState is BatchModelStateDictionary) && _asyncLocal.Value is BatchModelStateDictionary modelState) { //single operation _asyncLocal.Value = new ModelStateDictionary(); Db.OeDataAdapter dataAdapter = modelState.DataAdapter; Object dataContext = modelState.DataContext.DbContext; OeOperationMessage operation = modelState.DataContext.Operation; try { dataAdapter.SaveChangesAsync(dataContext, CancellationToken.None).GetAwaiter().GetResult(); dataAdapter.EntitySetAdapters.Find(operation.EntitySet).UpdateEntityAfterSave(dataContext, operation.Entry); context.HttpContext.Response.ContentType = context.HttpContext.Request.ContentType; var batchWriter = new Writers.OeBatchWriter(modelState.DataContext.EdmModel, UriHelper.GetBaseUri(context.HttpContext.Request)); batchWriter.WriteOperationAsync(context.HttpContext.Response.Body, operation).GetAwaiter().GetResult(); } finally { dataAdapter.CloseDataContext(dataContext); } } }
public OeDataContext(ref OeEntitySetAdapter entitySetAdapter, Object dataContext, OeOperationMessage operation) { _entitySetAdapter = entitySetAdapter; _dataContext = dataContext; _operation = operation; }