Ich habe eine ASP.NET-Anwendung, die einige Geschäftsobjekte zwischenspeichert. Wenn ein neues Objekt gespeichert wird, rufe ich remove auf dem Schlüssel auf, um die Objekte zu löschen. Die neue Liste sollte beim nächsten Mal, wenn ein Benutzer die Daten anfordert, lazy geladen werden.ASP.NET Cache - Umstände, in denen Entfernen ("Schlüssel") nicht funktioniert?
Außer gibt es ein Problem mit verschiedenen Ansichten des Cache in verschiedenen Clients.
- Zwei Benutzer betrachten die Website
- Ein neues Objekt durch den Benutzer gespeichert 1 und der Cache entfernt wird
- Benutzer 1 die auf dem neuesten Stand Sicht auf die Daten
- User 2 sieht auch verwendet die Website, aber nicht aus irgendeinem Grunde nicht die neuen zwischengespeicherten Daten sehen, nachdem Benutzer 1 ein neues Objekt gespeichert hat - sie weiterhin die alte Liste sehen
Dies ist eine verkürzte Version des Codes:
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");
}
}
Hat jemand irgendwelche Ideen, warum dies passieren könnte?
Edit: Ich benutze Linq2SQL, um die Objekte zu retreive, obwohl ich den Kontext entsorgen.
Cache ist Thread sicher – fengd