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())); }