Обмен данными между действиями - PullRequest
3 голосов
/ 16 февраля 2010

Мне поручено программировать веб-сайт, и я новичок в создании веб-сайтов.

Веб-сайт должен показывать обзор поездок и разрешать переход к деталям поездок и местам поездок. Наш слой базы данных вернет список с поездками и всеми их местами:

class Trip { List<Place> places; }
List<Trip> trip = datalayer.GetTrips();

Так что запрос уже будет содержать поездки и все места. Когда мы хотим показать одну поездку или место, нет необходимости идти в БД. Правильно ли хранить список поездок в кеше, а затем использовать кеш при отображении поездки или одного из ее мест?

Пример кода:

//GET /Trips
public ActionResult Index()
{
    List<Trip> tripList;
    _dbLayer.GetTrips(out tripList);
    HttpContext.Current.Cache.["Trips-" + clientId] = tripList;
    return View(tripList);
}

//GET: /Trips/Details/5
public ActionResult Detail(int id)
{
    List<Trip> tripList = HttpContext.Current.Cache.["Trips-" + clientId];
    if(tripList != null)
    {
      Trip trip = tripList.SingleOrDefault(i => i.TechNr == id)
      return View(trip);
    }
    else
    {
       return View("NotFound");
    }
 }

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Если вы используете класс Linq to SQL datacontext, он автоматически кеширует данные для вас. Я бы предложил оставить кэширование на этом уровне вместо кэширования в контроллере.

0 голосов
/ 16 февраля 2010

Я не буду рекомендовать (в данном случае), поскольку сервер sql также выполняет кэширование.Другим недостатком является то, что на стороне базы данных, если строка обновляется, у вас все еще есть грязная запись, и вероятность избыточных данных увеличивается.Вы можете использовать Invalidation для кэша SQL Server, но для этого нужны некоторые другие шаги, объясненные Скоттом Ханселманом здесь

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