У меня есть приложение ASP.NET, которое кэширует некоторые бизнес-объекты. Когда новый объект сохраняется, я вызываю клавишу «Удалить» для очистки объектов. Новый список должен загружаться лениво при следующем запросе данных пользователем.
За исключением проблемы с разными представлениями кэша в разных клиентах.
- Два пользователя просматривают сайт
- Новый объект сохраняется пользователем 1, а кэш удаляется
- Пользователь 1 видит актуальное представление данных
- Пользователь 2 также использует сайт, но по какой-то причине не видит новые кэшированные данные после того, как пользователь 1 сохранил новый объект - они продолжают видеть старый список
Это сокращенная версия кода:
public static JobCollection JobList
{
get
{
if (HttpRuntime.Cache["JobList"] == null)
{
GetAndCacheJobList();
}
return (JobCollection)HttpRuntime.Cache["JobList"];
}
}
private static void GetAndCacheJobList()
{
using (DataContext context = new DataContext(ConnectionUtil.ConnectionString))
{
var query = from j in context.JobEntities
select j;
JobCollection c = new JobCollection();
foreach (JobEntity i in query)
{
Job newJob = new Job();
....
c.Add(newJob);
}
HttpRuntime.Cache.Insert("JobList", c, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
}
public static void SaveJob(Job job, IDbConnection connection)
{
using (DataContext context = new DataContext(connection))
{
JobEntity ent = new JobEntity();
...
context.JobEntities.InsertOnSubmit(ent);
context.SubmitChanges();
HttpRuntime.Cache.Remove("JobList");
}
}
У кого-нибудь есть идеи, почему это может происходить?
Редактировать: я использую Linq2SQL для получения объектов, хотя я избавляюсь от контекста.