private IAsyncEnumerable <Object> ExecuteGet(IEdmModel refModel, ODataUri odataUri, OeRequestHeaders headers, IQueryable source) { if (_modelBoundProvider != null) { _modelBoundProvider.Validate(_edmModel, odataUri); } _queryContext = new OeQueryContext(refModel, odataUri) { MetadataLevel = headers.MetadataLevel }; if (odataUri.Path.LastSegment is OperationSegment) { return(OeOperationHelper.ApplyBoundFunction(_queryContext)); } if (source != null) { _queryContext.QueryableSource = e => e == _queryContext.EntryFactory.EntitySet ? source : null; } if (_queryContext.ODataUri.Path.LastSegment is CountSegment) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; int count = _dataAdapter.ExecuteScalar <int>(_dataContext, _queryContext); return((IAsyncEnumerable <Object>)Infrastructure.AsyncEnumeratorHelper.ToAsyncEnumerable(Task.FromResult(count))); } return(_dataAdapter.Execute(_dataContext, _queryContext)); }
public async Task ExecuteAsync(ODataUri odataUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { OeQueryContext queryContext = CreateQueryContext(odataUri, headers.MaxPageSize, headers.NavigationNextLink, headers.MetadataLevel); Db.OeDataAdapter dataAdapter = _edmModel.GetDataAdapter(queryContext.EdmModel.EntityContainer); Object dataContext = null; try { dataContext = dataAdapter.CreateDataContext(); if (queryContext.IsCountSegment) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; int count = dataAdapter.ExecuteScalar <int>(dataContext, queryContext); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(count.ToString(CultureInfo.InvariantCulture)); stream.Write(buffer, 0, buffer.Length); } else { using (Db.OeAsyncEnumerator asyncEnumerator = dataAdapter.ExecuteEnumerator(dataContext, queryContext, cancellationToken)) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream).ConfigureAwait(false); } } finally { if (dataContext != null) { dataAdapter.CloseDataContext(dataContext); } } }
public async Task ExecuteAsync(ODataUri odataUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { if (_modelBoundProvider != null) { _modelBoundProvider.Validate(_edmModel, odataUri); } var queryContext = new OeQueryContext(_edmModel, odataUri) { MetadataLevel = headers.MetadataLevel }; if (queryContext.ODataUri.Path.LastSegment is OperationSegment) { using (IAsyncEnumerator <Object> asyncEnumerator = OeOperationHelper.ApplyBoundFunction(queryContext).GetEnumerator()) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream, cancellationToken).ConfigureAwait(false); return; } Object dataContext = null; Db.OeDataAdapter dataAdapter = queryContext.EdmModel.GetDataAdapter(queryContext.EdmModel.EntityContainer); try { dataContext = dataAdapter.CreateDataContext(); if (odataUri.Path.LastSegment is CountSegment) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; int count = dataAdapter.ExecuteScalar <int>(dataContext, queryContext); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(count.ToString(CultureInfo.InvariantCulture)); stream.Write(buffer, 0, buffer.Length); } else { using (IAsyncEnumerator <Object> asyncEnumerator = dataAdapter.Execute(dataContext, queryContext).GetEnumerator()) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream, cancellationToken).ConfigureAwait(false); } } finally { if (dataContext != null) { dataAdapter.CloseDataContext(dataContext); } } }
public static int GetNestedCount(IEdmModel edmModel, Db.IOeDbEnumerator dbEnumerator) { Db.IOeDbEnumerator parentEnumerator = dbEnumerator.ParentEnumerator; ODataUri odataUri = OeNextPageLinkBuilder.GetCountODataUri(edmModel, parentEnumerator.EntryFactory, dbEnumerator.EntryFactory.NavigationSelectItem, parentEnumerator.Current); var queryContext = new OeQueryContext(edmModel, odataUri); IEdmEntitySet entitySet = (odataUri.Path.FirstSegment as EntitySetSegment).EntitySet; Db.OeDataAdapter dataAdapter = edmModel.GetDataAdapter(entitySet.Container); Object dataContext = null; try { dataContext = dataAdapter.CreateDataContext(); return(dataAdapter.ExecuteScalar <int>(dataContext, queryContext)); } finally { if (dataContext != null) { dataAdapter.CloseDataContext(dataContext); } } }