在操作之间共享数据

时间:2010-02-16 16:36:18

标签: .net asp.net-mvc session

我接受了网站编程的任务,而且我是网站创建的新手。

该网站必须显示旅行的概述,并允许导航到单个旅行细节和这个旅行地点。我们的数据库层将返回一个包含旅行及其所有位置的列表:

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

因此请求已包含行程和所有地点。当我们想要显示单个旅行或地点时,没有必要去DB。将行程列表存储在缓存中然后在显示行程或其中一个位置时使用缓存是否合适?

示例代码:

//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 个答案:

答案 0 :(得分:2)

如果您正在使用Linq to SQL datacontext类,它会自动为您缓存数据。我建议将缓存留在此层,而不是在控制器中缓存。

答案 1 :(得分:0)

我不建议(在这种情况下)因为sql server也在做缓存。另一个缺点是,在数据库端,如果更新了行,您仍然有脏记录和冗余数据增加的可能性。虽然您可以使用SQL Server缓存失效,但需要一些其他步骤,由Scott Hansellman解释here