private ODataRequestMessageWrapper CreateNextRequest() { bool flag = base.streamRequestKind == BaseSaveResult.StreamRequestKind.None; if (base.entryIndex < base.ChangedEntries.Count) { Descriptor descriptor = base.ChangedEntries[base.entryIndex]; if (descriptor.DescriptorKind == DescriptorKind.Entity) { EntityDescriptor descriptor2 = (EntityDescriptor)descriptor; descriptor2.CloseSaveStream(); if ((base.streamRequestKind == BaseSaveResult.StreamRequestKind.PutMediaResource) && (EntityStates.Unchanged == descriptor2.State)) { descriptor2.ContentGeneratedForSave = true; flag = true; } } else if (descriptor.DescriptorKind == DescriptorKind.NamedStream) { ((StreamDescriptor)descriptor).CloseSaveStream(); } } if (flag) { base.entryIndex++; } ODataRequestMessageWrapper wrapper = null; if (base.entryIndex < base.ChangedEntries.Count) { Descriptor descriptor3 = base.ChangedEntries[base.entryIndex]; if (descriptor3.DescriptorKind == DescriptorKind.Entity) { EntityDescriptor entityDescriptor = (EntityDescriptor)descriptor3; if (((EntityStates.Unchanged == descriptor3.State) || (EntityStates.Modified == descriptor3.State)) && ((wrapper = this.CheckAndProcessMediaEntryPut(entityDescriptor)) != null)) { base.streamRequestKind = BaseSaveResult.StreamRequestKind.PutMediaResource; } else if ((EntityStates.Added == descriptor3.State) && ((wrapper = this.CheckAndProcessMediaEntryPost(entityDescriptor)) != null)) { base.streamRequestKind = BaseSaveResult.StreamRequestKind.PostMediaResource; entityDescriptor.StreamState = EntityStates.Added; } else { base.streamRequestKind = BaseSaveResult.StreamRequestKind.None; wrapper = base.CreateRequest(entityDescriptor); } } else if (descriptor3.DescriptorKind == DescriptorKind.NamedStream) { wrapper = this.CreateNamedStreamRequest((StreamDescriptor)descriptor3); } else { wrapper = base.CreateRequest((LinkDescriptor)descriptor3); } if (wrapper != null) { wrapper.FireSendingRequest2(descriptor3); } } return(wrapper); }
private ODataRequestMessageWrapper GenerateBatchRequest() { if ((base.ChangedEntries.Count == 0) && (this.Queries == null)) { base.SetCompleted(); return(null); } ODataRequestMessageWrapper requestMessage = this.CreateBatchRequest(); using (ODataMessageWriter writer = Serializer.CreateMessageWriter(requestMessage, base.RequestInfo)) { ODataUtils.SetHeadersForPayload(writer, ODataPayloadKind.Batch); requestMessage.FireSendingRequest2(null); this.batchWriter = writer.CreateODataBatchWriter(); this.batchWriter.WriteStartBatch(); if (this.Queries != null) { for (int i = 0; i < this.Queries.Length; i++) { Uri requestUri = base.RequestInfo.BaseUriResolver.CreateAbsoluteUriIfNeeded(this.Queries[i].QueryComponents(base.RequestInfo.MaxProtocolVersion).Uri); ODataRequestMessageWrapper wrapper2 = this.CreateRequestMessage(requestUri, "GET"); Version requestVersion = this.Queries[i].QueryComponents(base.RequestInfo.MaxProtocolVersion).Version; WebUtil.SetOperationVersionHeaders(wrapper2, requestVersion, base.RequestInfo.MaxProtocolVersionAsVersion); wrapper2.FireSendingRequest2(null); } } else if (0 < base.ChangedEntries.Count) { this.batchWriter.WriteStartChangeset(); ClientEdmModel model = ClientEdmModel.GetModel(base.RequestInfo.MaxProtocolVersion); for (int j = 0; j < base.ChangedEntries.Count; j++) { Descriptor descriptor = base.ChangedEntries[j]; if (!descriptor.ContentGeneratedForSave) { ODataRequestMessageWrapper wrapper3; EntityDescriptor entityDescriptor = descriptor as EntityDescriptor; if (descriptor.DescriptorKind == DescriptorKind.Entity) { if (entityDescriptor.State != EntityStates.Added) { if (((entityDescriptor.State == EntityStates.Unchanged) || (entityDescriptor.State == EntityStates.Modified)) && (entityDescriptor.SaveStream != null)) { throw System.Data.Services.Client.Error.NotSupported(System.Data.Services.Client.Strings.Context_BatchNotSupportedForMediaLink); } } else if (model.GetClientTypeAnnotation(model.GetOrCreateEdmType(entityDescriptor.Entity.GetType())).IsMediaLinkEntry || entityDescriptor.IsMediaLinkEntry) { throw System.Data.Services.Client.Error.NotSupported(System.Data.Services.Client.Strings.Context_BatchNotSupportedForMediaLink); } } else if (descriptor.DescriptorKind == DescriptorKind.NamedStream) { throw System.Data.Services.Client.Error.NotSupported(System.Data.Services.Client.Strings.Context_BatchNotSupportedForNamedStreams); } if (descriptor.DescriptorKind == DescriptorKind.Entity) { wrapper3 = base.CreateRequest(entityDescriptor); } else { wrapper3 = base.CreateRequest((LinkDescriptor)descriptor); } wrapper3.FireSendingRequest2(descriptor); base.CreateChangeData(j, wrapper3); } } this.batchWriter.WriteEndChangeset(); } this.batchWriter.WriteEndBatch(); this.batchWriter.Flush(); } return(requestMessage); }