public static OeOperationMessage Create(OeMessageContext context, ODataBatchReader reader) { ODataBatchOperationRequestMessage batchRequest = reader.CreateOperationRequestMessage(); var operation = new OeOperationMessage(batchRequest); if (batchRequest.Method == ODataConstants.MethodDelete) { operation.EntityItem = operation.ReadEntityFromUrl(context); } else { using (Stream stream = batchRequest.GetStream()) operation.EntityItem = operation.ReadEntityFromStream(context, stream); } return(operation); }
private async Task ExecuteOperation(OeOperationMessage operation, CancellationToken cancellationToken) { Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); AddToEntitySet(dataContext, operation); await _dataAdapter.SaveChangesAsync(_model, dataContext, cancellationToken).ConfigureAwait(false); } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
private void AddToEntitySet(Object dataContext, OeOperationMessage operation) { Db.OeEntitySetAdapter entitySetAdapter = _dataAdapter.GetEntitySetAdapter(operation.EntityItem.EntitySet.Name); switch (operation.Method) { case ODataConstants.MethodDelete: entitySetAdapter.RemoveEntity(dataContext, operation.EntityItem.Entity); break; case ODataConstants.MethodPatch: entitySetAdapter.AttachEntity(dataContext, operation.EntityItem.Entity); break; case ODataConstants.MethodPost: entitySetAdapter.AddEntity(dataContext, operation.EntityItem.Entity); break; default: throw new NotImplementedException(operation.Method); } }
public static OeBatchMessage CreateBatchMessage(OeMessageContext context, Stream requestStream, String contentType) { IODataRequestMessage requestMessage = new OeInMemoryMessage(requestStream, contentType); var settings = new ODataMessageReaderSettings() { EnableMessageStreamDisposal = false }; using (var messageReader = new ODataMessageReader(requestMessage, settings)) { var batchMessage = new List <OeBatchMessage>(); ODataBatchReader batchReader = messageReader.CreateODataBatchReader(); while (batchReader.Read()) { if (batchReader.State == ODataBatchReaderState.ChangesetStart) { var operations = new List <OeOperationMessage>(); while (batchReader.Read() && batchReader.State != ODataBatchReaderState.ChangesetEnd) { if (batchReader.State == ODataBatchReaderState.Operation) { OeOperationMessage operation = OeOperationMessage.Create(context, batchReader); operations.Add(operation); } } return(new OeBatchMessage(contentType, operations)); } else if (batchReader.State == ODataBatchReaderState.Operation) { OeOperationMessage operation = OeOperationMessage.Create(context, batchReader); return(new OeBatchMessage(contentType, operation)); } } } throw new InvalidOperationException("batch not found"); }
private OeBatchMessage(String contentType, OeOperationMessage operation) { _contentType = contentType; _operation = operation; }