Пример #1
0
        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);
        }
Пример #2
0
        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);
        }