コード例 #1
0
        public async Task <IList> ExecuteOe <TResult>(String requestUri, bool navigationNextLink, int pageSize)
        {
            OeModelBoundProvider modelBoundProvider = ModelBoundProvider;

            if (modelBoundProvider == null)
            {
                var modelBoundProviderBuilder = new PageNextLinkModelBoundBuilder(OeEdmModel, IsSqlite);
                modelBoundProvider = modelBoundProviderBuilder.BuildProvider(pageSize, navigationNextLink);
            }

            OeParser         parser         = CreateParser(requestUri, modelBoundProvider);
            var              uri            = new Uri(parser.BaseUri, requestUri);
            OeRequestHeaders requestHeaders = OeRequestHeaders.JsonDefault.SetMaxPageSize(pageSize);

            long     count = -1;
            ODataUri odataUri;
            var      fromOe = new List <Object>();

            do
            {
                odataUri = ParseUri(uri.OriginalString);
                var response = new MemoryStream();
                await parser.ExecuteQueryAsync(odataUri, requestHeaders, response, CancellationToken.None).ConfigureAwait(false);

                response.Position = 0;

                List <Object>  result;
                ResponseReader responseReader;
                if (typeof(TResult).IsPrimitive)
                {
                    TypeConverter converter = TypeDescriptor.GetConverter(typeof(TResult));
                    return(new Object[] { converter.ConvertFromString(new StreamReader(response).ReadToEnd()) });
                }
                {
                    responseReader = new OpenTypeResponseReader(TestHelper.GetEdmModel(DbEdmModel, odataUri.Path), ServiceProvider);
                    result         = responseReader.Read(response).Cast <Object>().ToList();
                }

                if (pageSize > 0)
                {
                    Xunit.Assert.InRange(result.Count, 0, requestHeaders.MaxPageSize);
                }
                fromOe.AddRange(result);

                await responseReader.FillNextLinkProperties(parser, CancellationToken.None).ConfigureAwait(false);

                if (count < 0)
                {
                    count = responseReader.ResourceSet.Count.GetValueOrDefault();
                }

                uri = responseReader.ResourceSet.NextPageLink;
            }while (uri != null);

            if (odataUri.QueryCount != null)
            {
                Xunit.Assert.Equal(count, fromOe.Count);
            }

            return(fromOe);
        }
コード例 #2
0
        public async Task <IList> ExecuteOe <TResult>(String requestUri, bool navigationNextLink, int pageSize)
        {
            ODataUri         odataUri       = ParseUri(requestUri);
            var              parser         = new OeParser(odataUri.ServiceRoot, OeDataAdapter, EdmModel);
            var              uri            = new Uri(odataUri.ServiceRoot, requestUri);
            OeRequestHeaders requestHeaders = OeRequestHeaders.JsonDefault.SetMaxPageSize(pageSize).SetNavigationNextLink(navigationNextLink);

            long count  = -1;
            var  fromOe = new List <Object>();

            do
            {
                var response = new MemoryStream();
                await parser.ExecuteGetAsync(uri, requestHeaders, response, CancellationToken.None).ConfigureAwait(false);

                response.Position = 0;

                List <Object>  result;
                ResponseReader responseReader;
                if (typeof(TResult).IsPrimitive)
                {
                    TypeConverter converter = TypeDescriptor.GetConverter(typeof(TResult));
                    return(new Object[] { converter.ConvertFromString(new StreamReader(response).ReadToEnd()) });
                }
                else if (typeof(TResult) == typeof(Object))
                {
                    responseReader = new OpenTypeResponseReader(EdmModel, DbDataAdapter);
                    result         = responseReader.Read(response).Cast <Object>().ToList();
                }
                else
                {
                    responseReader = new ResponseReader(EdmModel, DbDataAdapter);
                    result         = responseReader.Read <TResult>(response).Cast <Object>().ToList();
                }

                if (pageSize > 0)
                {
                    Xunit.Assert.InRange(result.Count, 0, requestHeaders.MaxPageSize);
                }
                fromOe.AddRange(result);

                foreach (Object entity in fromOe)
                {
                    await responseReader.FillNextLinkProperties(odataUri.ServiceRoot, entity, CancellationToken.None).ConfigureAwait(false);
                }

                if (count < 0)
                {
                    count = responseReader.ResourceSet.Count.GetValueOrDefault();
                }

                uri = responseReader.ResourceSet.NextPageLink;
            }while (uri != null);

            if (odataUri.QueryCount != null)
            {
                Xunit.Assert.Equal(count, fromOe.Count);
            }

            return(fromOe);
        }