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); }
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); }