Exemplo n.º 1
0
        public IEnumerable<T> Resolve(ResolveFieldContext context)
        {
            var zzz3 = context.ParentType.Fields.Single(f => f.Name == context.Document.Operations.Single().SelectionSet.Selections.OfType<Field>().Single().Name);
            var zzz = context.Schema.FindType("order");
            var zzz2 = context.Schema.Query.Fields.Single(f => f.Name == context.FieldAst.Name);

            var barcode = context.GetArgument<string>("barcode");
            var title = context.GetArgument<string>("title");
            var sellingPrice = context.GetArgument<decimal>("sellingPrice");

            var results = new List<T>();

            var odataParser = new ODataUriParser(_edmModel, new Uri("http://dummy"), new Uri("http://dummy/Orders?$expand=Customer&$select=Name"));
            odataParser.Resolver.EnableCaseInsensitive = true;
            //ODataUri odataUri = odataParser.ParseUri();

            var translator = new OeGraphQLAstToODataUri(_edmModel, context.Schema);
            ODataUri odataUri = translator.Translate(context.Document.OriginalQuery);
            var odataQuery = odataUri.BuildUri(ODataUrlKeyDelimiter.Parentheses);

            var parser = new OeGetParser(_dataAdapter, _edmModel);
            Parsers.OeQueryContext queryContext = parser.CreateQueryContext(odataUri, 0, false, OeMetadataLevel.Minimal);
            Db.OeAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteEnumerator(context.UserContext, queryContext, CancellationToken.None);
            using (var entityAsyncEnumerator = new OeEntityAsyncEnumerator<T>(queryContext.EntryFactory, asyncEnumerator, queryContext))
            {
                while (entityAsyncEnumerator.MoveNext().GetAwaiter().GetResult())
                    results.Add((T)entityAsyncEnumerator.Current);
            }
            return results;
        }
        public IEnumerable <Dictionary <String, Object> > Resolve(ResolveFieldContext context)
        {
            var results = new List <Dictionary <String, Object> >();

            var       translator = new OeGraphqlAstToODataUri(_edmModel, context);
            ODataUri  odataUri   = translator.Translate(context.Document.OriginalQuery);
            IEdmModel refModel   = _edmModel.GetEdmModel(odataUri.Path);

            Db.OeDataAdapter dataAdapter = refModel.GetDataAdapter(refModel.EntityContainer);
            context.UserContext = dataAdapter.CreateDataContext();

            try
            {
                var queryContext = new Parsers.OeQueryContext(refModel, odataUri);
                IAsyncEnumerator <Object> asyncEnumerator = dataAdapter.Execute(context.UserContext, queryContext).GetEnumerator();
                using (var entityAsyncEnumerator = new OeGraphqlAsyncEnumerator(asyncEnumerator, queryContext.EntryFactory))
                {
                    while (entityAsyncEnumerator.MoveNext().GetAwaiter().GetResult())
                    {
                        results.Add(entityAsyncEnumerator.Current);
                    }
                }
            }
            finally
            {
                if (context.UserContext != null)
                {
                    dataAdapter.CloseDataContext(context.UserContext);
                }
            }

            return(results);
        }
Exemplo n.º 3
0
        public async Task <IEnumerable <Dictionary <String, Object?> > > Resolve(IResolveFieldContext context)
        {
            var results = new List <Dictionary <String, Object?> >();

            var       translator = new OeGraphqlAstToODataUri(_edmModel, context);
            ODataUri  odataUri   = translator.Translate(context.Document.OriginalQuery);
            IEdmModel refModel   = _edmModel.GetEdmModel(odataUri.Path);

            Db.OeDataAdapter         dataAdapter           = refModel.GetDataAdapter(refModel.EntityContainer);
            Object                   dataContext           = dataAdapter.CreateDataContext();
            OeGraphqlAsyncEnumerator?entityAsyncEnumerator = null;

            try
            {
                var queryContext = new Parsers.OeQueryContext(refModel, odataUri);
                IAsyncEnumerator <Object> asyncEnumerator = dataAdapter.Execute(dataContext, queryContext).GetAsyncEnumerator();

                if (queryContext.EntryFactory == null)
                {
                    throw new InvalidOperationException("queryContext.EntryFactory must be not null");
                }

                entityAsyncEnumerator = new OeGraphqlAsyncEnumerator(asyncEnumerator, queryContext.EntryFactory, CancellationToken.None);
                while (await entityAsyncEnumerator.MoveNextAsync())
                {
                    if (entityAsyncEnumerator.Current != null)
                    {
                        results.Add(entityAsyncEnumerator.Current);
                    }
                }
            }
            finally
            {
                if (dataContext != null)
                {
                    dataAdapter.CloseDataContext(dataContext);
                }
                if (entityAsyncEnumerator != null)
                {
                    await entityAsyncEnumerator.DisposeAsync().ConfigureAwait(false);
                }
            }

            return(results);
        }