private static EntityDataServiceResponse <ProductVariant> GetProductVariants(GetProductVariantsDataRequest request)
            {
                IEnumerable <ItemVariantInventoryDimension> itemVariants = request.ItemAndInventoryDimensionIds;
                RequestContext context = request.RequestContext;

                ThrowIf.Null(itemVariants, "itemVariants");
                ThrowIf.Null(context, "context");

                ColumnSet columnSet = new ColumnSet();
                ItemL2CacheDataStoreAccessor level2CacheDataAccessor = GetCacheAccessor(context);

                bool found;
                bool updateL2Cache;
                ReadOnlyCollection <ProductVariant> result = DataManager.GetDataFromCache(() => level2CacheDataAccessor.GetVariants(itemVariants, columnSet), out found, out updateL2Cache);

                if (!found)
                {
                    var query = new SqlPagedQuery(QueryResultSettings.AllRecords)
                    {
                        Select = columnSet,
                        From   = GetVariantsByItemIdAndInventDimIdFunctionName
                    };

                    using (var type = new ItemVariantInventoryDimensionTableType(itemVariants))
                    {
                        query.Parameters[DatabaseAccessor.ChannelIdVariableName]   = context.GetPrincipal().ChannelId;
                        query.Parameters[DatabaseAccessor.ChannelDateVariableName] = context.GetNowInChannelTimeZone().Date;
                        query.Parameters[ItemVariantIdsVariableName] = type.DataTable;

                        using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(context))
                        {
                            result = databaseContext.ReadEntity <ProductVariant>(query).Results;
                        }
                    }

                    updateL2Cache &= result != null;
                }

                if (updateL2Cache)
                {
                    level2CacheDataAccessor.PutVariants(itemVariants, columnSet, result);
                }

                return(new EntityDataServiceResponse <ProductVariant>(result.AsPagedResult()));
            }