Ejemplo n.º 1
0
 public OeEfCoreDataAdapter(DbContextOptions options, Db.OeQueryCache queryCache, OeEfCoreOperationAdapter operationAdapter)
     : base(queryCache, operationAdapter)
 {
     if (options != null)
     {
         _dbContextPool = new DbContextPool <T>(options);
     }
 }
Ejemplo n.º 2
0
        private static IEnumerable <TResult> GetFromCache <TResult>(OeParseUriContext parseUriContext, T dbContext, Db.OeQueryCache queryCache)
        {
            Db.QueryCacheItem queryCacheItem = queryCache.GetQuery(parseUriContext);

            Func <QueryContext, IEnumerable <TResult> > queryExecutor;

            if (queryCacheItem == null)
            {
                IQueryable query            = parseUriContext.EntitySetAdapter.GetEntitySet(dbContext);
                var        parameterVisitor = new OeConstantToParameterVisitor();
                Expression expression       = parseUriContext.CreateExpression(query, parameterVisitor);
                queryExecutor = dbContext.CreateQueryExecutor <TResult>(expression);

                queryCache.AddQuery(parseUriContext, queryExecutor, parameterVisitor.ConstantToParameterMapper);
                parseUriContext.ParameterValues = parameterVisitor.ParameterValues;
            }
            else
            {
                queryExecutor = (Func <QueryContext, IEnumerable <TResult> >)queryCacheItem.Query;
                parseUriContext.EntryFactory = queryCacheItem.EntryFactory;
            }

            var queryContextFactory = dbContext.GetService <IQueryContextFactory>();
            var queryContext        = queryContextFactory.Create();

            foreach (Db.OeQueryCacheDbParameterValue parameterValue in parseUriContext.ParameterValues)
            {
                queryContext.AddParameter(parameterValue.ParameterName, parameterValue.ParameterValue);
            }

            return(queryExecutor(queryContext));
        }
Ejemplo n.º 3
0
 public OeEfCoreDataAdapter(Db.OeQueryCache queryCache) : base(queryCache)
 {
 }
Ejemplo n.º 4
0
 public OeLinq2DbDataAdapter(Db.OeQueryCache queryCache) : base(queryCache)
 {
 }
Ejemplo n.º 5
0
        private static IAsyncEnumerable <TResult> GetFromCache <TResult>(OeQueryContext queryContext, T dbContext, Db.OeQueryCache queryCache)
        {
            OeCacheContext cacheContext = queryContext.CreateCacheContext();

            Db.QueryCacheItem queryCacheItem = queryCache.GetQuery(cacheContext);

            Func <QueryContext, IAsyncEnumerable <TResult> > queryExecutor;
            Expression countExpression;
            IReadOnlyList <Db.OeQueryCacheDbParameterValue> parameterValues;

            if (queryCacheItem == null)
            {
                IQueryable query            = queryContext.EntitySetAdapter.GetEntitySet(dbContext);
                var        parameterVisitor = new OeConstantToParameterVisitor(false);

                Expression expression = queryContext.CreateExpression(query, parameterVisitor);
                queryExecutor   = dbContext.CreateAsyncQueryExecutor <TResult>(expression);
                countExpression = queryContext.CreateCountExpression(query, expression);
                queryCache.AddQuery(queryContext.CreateCacheContext(parameterVisitor.ConstantToParameterMapper), queryExecutor, countExpression,
                                    queryContext.EntryFactory, queryContext.SkipTokenParser?.Accessors);
                parameterValues = parameterVisitor.ParameterValues;
            }
            else
            {
                queryExecutor             = (Func <QueryContext, IAsyncEnumerable <TResult> >)queryCacheItem.Query;
                queryContext.EntryFactory = queryCacheItem.EntryFactory;
                if (queryContext.SkipTokenParser != null)
                {
                    queryContext.SkipTokenParser.Accessors = queryCacheItem.SkipTokenAccessors;
                }
                countExpression = queryCacheItem.CountExpression;
                parameterValues = cacheContext.ParameterValues;
            }

            var          queryContextFactory = dbContext.GetService <IQueryContextFactory>();
            QueryContext efQueryContext      = queryContextFactory.Create();

            foreach (Db.OeQueryCacheDbParameterValue parameterValue in parameterValues)
            {
                efQueryContext.AddParameter(parameterValue.ParameterName, parameterValue.ParameterValue);
            }

            if (queryContext.ODataUri.QueryCount.GetValueOrDefault())
            {
                queryContext.CountExpression = new OeParameterToVariableVisitor().Translate(countExpression, parameterValues);
            }

            return(queryExecutor(efQueryContext));
        }
Ejemplo n.º 6
0
 public OeEfCoreDataAdapter(DbContextOptions options, Db.OeQueryCache queryCache)
     : this(options, queryCache, new OeEfCoreOperationAdapter(typeof(T), _entitySetMetaAdapters))
 {
 }
Ejemplo n.º 7
0
 public OeEf6DataAdapter(Db.OeQueryCache queryCache, OeEf6OperationAdapter operationAdapter)
     : base(queryCache, operationAdapter)
 {
 }