SQL-Caching und Entity Framework

Ich haben zusammen eine kleine ASP.NET MVC 2-Website, hat einige sehr umfangreiche date-mining - /table-joins/etc.

Mithilfe von MVC, ich habe einen controller, der die Daten zurück, die in vielen verschiedenen Formen (Tabellen, Bilder, etc). Zu retten, schlagen Sie die Datenbank regelmäßig ich habe ein dual-cache-Mechanismus:

  1. Für identische Parameter, um die gleiche Aktion, die ich verwenden OutputCacheAttribute mit VaryByParam = "*".
  2. Vorausgesetzt, einige parameter der Aktion geändert hat (oder eine andere Aktion aufgerufen wird), ist es immer noch möglich, dass meine "Daten" hat, die zuvor angefordert wurden, also Speicher ich die Daten in einer view-Modell nach dem ersten Treffer in der Datenbank, die ich erreichen dies mit einem .NET 4.0 System.Runtime.Caching.ObjectCache.

Beispiel der ObjectCache im inneren des Controllers:

private static readonly ObjectCache cache = 
      new MemoryCache("CompareControllerCache");
private static void CacheObject(ViewModel obj, 
                                string param1, 
                                int someOtherParam )
{
    string key = string.Format("{0}-{1}", param1, someOtherParam);
    Trace.WriteLine(string.Format("Adding {0} to the cache", key));
    cache.Add(key, obj, new CacheItemPolicy
         {
             SlidingExpiration = TimeSpan.FromMinutes(1)
         });
}

// Corresponding GetCachedObject with similar key defining logic.

Das gibt mir eine gute performance-Verbesserung, aber wo es ausfällt, ist auf die CacheItemPolicy sehr einfach. Im Idealfall würde ich gerne das cache-Fenster größer zu werden, aber haben das zwischengespeicherte Element erlischt, wenn änderungen in der Datenbank.

Den CacheItemPolicy scheint dieser mit der ChangeMonitors - Kollektion, die ich hinzufügen könnte, ein SqlChangeMonitor, aber wenn man versucht zu konstruieren, das ist, wo ich zum Stillstand kommen.

Bin ich mit Entity Framework 4, um den Zugriff auf eine SQL-Datenbank, wie wie gestalte ich die SqlChangeMonitor überwachen die paar Datenbank-Tabellen, die wahrscheinlich sind zu auslösen eines cache laufen?

SqlChangeMonitor ist konstruiert, mit einer SqlDependency nimmt eine SqlCommand - wie kann ich die Riegel auf Entity Framework ist die Kapselung von meiner Datenbank?

  • Ziemlich gute Frage. Ich glaube nicht, dass es möglich, aber lassen Sie uns warten und sehen.
InformationsquelleAutor Ray Hayes | 2010-08-25
Schreibe einen Kommentar