Я изучаю ServiceStack и задаюсь вопросом, как использовать тег [Route] с кешированием. Вот мой код:Стратегия кэширования ServiceStack
[Route("/applicationusers")]
[Route("/applicationusers/{Id}")]
public class ApplicationUsers : IReturn<ApplicationUserResponse>
{
public int Id { get; set; }
}
public object Get(ApplicationUsers request)
{
//var cacheKey = UrnId.Create<ApplicationUsers>("users");
//return RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey,() =>
return new ApplicationUserResponse
{
ApplicationUsers = (request.Id == 0)
? Db.Select<ApplicationUser>()
: Db.Select<ApplicationUser>("Id = {0}", request.Id)
};
}
То, что я хочу, это для «ApplicationUsers» коллекции для кэширования, и времена, когда я прохожу в Id, для того, чтобы использовать основную коллекцию кешированной, чтобы получить отдельный объект вне.
Если я раскомментирую код выше, основная коллекция кэшируется под ключом «пользователи», но любой конкретный запрос, который я отправляю, снова попадает в Db. Я просто думаю о кеше неправильно?
Спасибо заранее, Майк
Правильно, если я поместил уникальное значение в cacheKey, он будет кэшировать вещи по отдельности. Но этого я не хочу. Я хочу кэшировать «Все», и отдельные запросы используют кэшированную коллекцию «Все». – MikeB
В этом случае сохраните свой статический кеш-ключ и фильтр после использования «ToOptimizedResultUsingCache» с помощью LINQ 'var result = RequestContext.ToOptimizedResultUsingCache (Cache, cacheKey,() => GetAll()); if (request.Id == 0) результат возврата; else return result.FirstOrDefault (item => item.Id == request.Id); ' – rudygt
Я пробовал это, единственная проблема заключается в том, что« ToOptimizedResultUsingCache »возвращает объект, и я не могу отнести его на свой конкретный тип. К тому времени, как я дошел до этого момента, я начал думать, что, возможно, я не использую кеширование, как это было разработано ... – MikeB