Что-то изменилось в кэшировании данных в ASP.NET-MVC3? - PullRequest
4 голосов
/ 29 июня 2011

Мне нужен кэш уровня приложения в моем проекте MVC3.

Я хочу использовать что-то подобное в контроллере:

using System.Web.Caching;    

protected IMyStuff GetStuff(string stuffkey)
{
    var ret = Cache[stuffkey];
    if (ret == null)
    {
        ret = LoadStuffFromDB(stuffkey);
        Cache[stuffkey] = ret;
    }
    return (IMyStuff)ret;
}

Сбой, потому что Cache ["foo"] не компилируется, поскольку "System.Web.Caching.Cache - это тип, но используется как переменная.

Я вижу, что Cache - это класс, но в сети немало примеров, когда он используется как Session ["asdf"] в контроллере, как будто это свойство.

Что я делаю не так?

Ответы [ 2 ]

11 голосов
/ 29 июня 2011

В контроллере есть свойство с именем Session, но нет свойства с именем Cache.Вы должны использовать HttpRuntime.Cache статическое свойство, чтобы получить Cache объект.Например:

using System.Web.Caching;    

protected IMyStuff GetStuff(string stuffkey)
{
    var ret = HttpRuntime.Cache[stuffkey];
    if (ret == null)
    {
        ret = LoadStuffFromDB(stuffkey);
        HttpRuntime.Cache[stuffkey] = ret;
    }
    return (IMyStuff)ret;
}
0 голосов
/ 06 августа 2014

В MVC есть более новые методы для кэширования данных. лайк - [OutputCache (длительность = 3)] Вы также можете указать это в вашем файле web.config как видно здесь: http://dotnetcodr.com/2013/02/07/caching-infrastructure-in-mvc4-with-c-caching-controller-actions/ Это гораздо более эффективно и доступно, если вы разрабатываете в MVC

  • однако, если вы хотите использовать предыдущий метод для кэширования, вы можете рассмотреть System.Web.HttpContext.Current.Cache["variable"] = datasetresult или listObjectResult т.е. System.Web.HttpContext.Current.Cache ["POSSEData"] = MyDevObjBO.GetListOfObjects ();

затем переназначить при необходимости: т.е. grdViewStuff.DataSource = (Список) System.Web.HttpContext.Current.Cache ["POSSEData"];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...