Exemple #1
0
        protected IActionResult OData <T>(OeAsyncEnumerator asyncEnumerator)
        {
            var entityAsyncEnumerator = new OeEntityAsyncEnumerator <T>(_queryContext.EntryFactory, asyncEnumerator, _queryContext.SkipTokenParser);

            return(new ODataResult <T>(_edmModel, _queryContext.ODataUri, entityAsyncEnumerator)
            {
                Count = asyncEnumerator.Count,
                PageSize = _queryContext.PageSize
            });
        }
Exemple #2
0
        public IAsyncEnumerable <T> ExecuteReader <T>(IQueryable source = null, bool navigationNextLink = false, int?maxPageSize = null)
        {
            OeAsyncEnumerator asyncEnumerator = GetAsyncEnumerator(source, navigationNextLink, maxPageSize);

            if (asyncEnumerator is OeAsyncEnumeratorAdapter || OeExpressionHelper.IsPrimitiveType(typeof(T)))
            {
                return(new OeAsyncEnumeratorAdapter <T>(asyncEnumerator));
            }

            return(new OeEntityAsyncEnumeratorAdapter <T>(asyncEnumerator, _queryContext));
        }
        protected ODataResult <T> OData <T>(OeAsyncEnumerator asyncEnumerator)
        {
            var entityAsyncEnumerator = new OeEntityAsyncEnumerator <T>(asyncEnumerator, _queryContext.EntryFactory, _queryContext);

            HttpContext.Response.RegisterForDispose(entityAsyncEnumerator);
            return(new ODataResult <T>(_edmModel, _queryContext.ODataUri, entityAsyncEnumerator)
            {
                Count = asyncEnumerator.Count,
                PageSize = _queryContext.PageSize
            });
        }
        public async Task <T?> ExecuteScalar <T>(IQueryable source = null) where T : struct
        {
            OeAsyncEnumerator asyncEnumerator = GetAsyncEnumerator(source);

            if (await asyncEnumerator.MoveNextAsync() && asyncEnumerator.Current != null)
            {
                return((T)asyncEnumerator.Current);
            }

            _httpContext.Response.ContentType = null;
            return(null);
        }
Exemple #5
0
        protected IActionResult OData(OeAsyncEnumerator asyncEnumerator)
        {
            if (asyncEnumerator is OeScalarAsyncEnumeratorAdapter)
            {
                return(ODataScalar(asyncEnumerator).GetAwaiter().GetResult());
            }

            Type clrType = _edmModel.GetClrType(_queryContext.EntryFactory.EntityType);
            Func <OeAsyncEnumerator, IActionResult> odataFunc = OData <Object>;

            return((IActionResult)odataFunc.Method.GetGenericMethodDefinition().MakeGenericMethod(clrType).Invoke(this, new Object[] { asyncEnumerator }));
        }
        private OeAsyncEnumerator ExecutePost(IEdmModel refModel, ODataUri odataUri, OeRequestHeaders headers, CancellationToken cancellationToken, Stream requestStream)
        {
            _odataUri = odataUri;

            var parser = new OePostParser(refModel);
            OeAsyncEnumerator asyncEnumerator = parser.GetAsyncEnumerator(odataUri, requestStream, headers, _dataContext, out bool isScalar);

            if (!isScalar)
            {
                _queryContext = parser.CreateQueryContext(odataUri, headers.MetadataLevel);
            }

            return(asyncEnumerator);
        }
Exemple #7
0
        private OeAsyncEnumerator Execute(ODataUri odataUri, Stream requestStream, OeRequestHeaders headers, CancellationToken cancellationToken)
        {
            Object dataContext = _dataAdapter.CreateDataContext();

            var parser = new OePostParser(_dataAdapter, _edmModel);
            OeAsyncEnumerator asyncEnumerator = parser.GetAsyncEnumerator(odataUri, requestStream, headers, dataContext, out Type returnClrType);

            if (returnClrType != null && !(returnClrType.IsPrimitive || returnClrType == typeof(String)))
            {
                _queryContext = parser.CreateQueryContext(odataUri, headers.MetadataLevel, returnClrType);
            }

            return(asyncEnumerator);
        }
Exemple #8
0
        protected async Task <IActionResult> ODataScalar(OeAsyncEnumerator asyncEnumerator)
        {
            if (await asyncEnumerator.MoveNextAsync() && asyncEnumerator.Current != null)
            {
                return new ContentResult()
                       {
                           Content     = asyncEnumerator.Current.ToString(),
                           ContentType = OeRequestHeaders.TextDefault.ContentType
                       }
            }
            ;

            base.HttpContext.Response.ContentType = null;
            return(new EmptyResult());
        }
    }