Cache-Handle aus dem EF Core-Kontext
NCacheDie EF Core-Erweiterungsmethoden ermöglichen auch Flexibilität beim Umgang mit Entitäten direkt über den Cache. Diese APIs beziehen sich nicht auf die Datenquelle, sodass Daten direkt in den Cache eingegeben und daraus entfernt werden, ohne dass die Datenquelle geändert werden muss. Solche APIs sind praktisch für Daten, die nicht häufig geändert werden sollen.
Note
Diese Funktion ist auch in verfügbar NCache Professional.
zu verwenden NCache EF Core-APIs schließen die folgenden Namespaces in Ihre Anwendung ein:
NCache stellt die folgenden APIs für Caching-Zwecke bereit:
EF Core-Kontext: Cache-Instanz abrufen
Das Cache-Handle wird über erhalten GetCache, NCache EF Core-Erweiterungsmethode für die Erweiterung Ihrer Anwendung DbContext
Klasse.
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
Nur Cache-API-Aufrufe werden über durchgeführt Cache
Wrapper kehrte zurück, als die GetCache Methode aufgerufen wird. Der Cache-Wrapper ist dem verwendeten Kontext zugeordnet. Entitäten und ihre jeweiligen Anforderungen werden auf ihren Typ überprüft, bevor die erforderlichen Vorgänge aufgerufen werden. Diese Überprüfung erfolgt mithilfe des vorliegenden Kontexts, der beim Initialisieren initialisiert wird GetCache Anruf erfolgt. Um Anforderungen erfolgreich auszuführen, muss der Kontext daher zum Zeitpunkt der Anforderung aktiv (nicht verworfen) sein. Geschieht dies nicht, wird es geworfen System.ObjectDisposedException
.
Daher wird im Code empfohlen, Nur-Cache-Vorgänge innerhalb des Kontexts auszuführen:
Wichtig
Wenn der Cache nicht initialisiert wird, wird eine Ausnahme ausgelöst und alle Vorgänge, die weiter ausgeführt werden müssen, schlagen bis zur Cache-Initialisierung fehl.
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
Insert
Das Insert Die Methode fügt die Entität ohne Abhängigkeit von der Datenbank direkt zum Cache hinzu. Möglicherweise speichern Sie einen neuen Kunden in der Datenbank und haben bereits alle zuvor hinzugefügten Kunden in Ihren Cache geholt. Anstatt später eine LINQ-Abfrage auszuführen, um den neuen Kunden aus der Datenquelle in den Cache zu holen, können Sie einfach aufrufen Insert direkt nachdem der Kunde zur Datenbank hinzugefügt wurde (wann SaveChanges
aufgerufen wird) mit derselben Instanz der Entität, die zum Einfügen in die Datenbank verwendet wird. Dies erspart einer Entität die Kosten für eine Datenbankreise.
Entitäten können wie folgt zwischengespeichert werden Caching-Optionen:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
Wichtig
- Der Wert für
StoreAs
isSeparateEntities
, da Entitäten über diese API als separate Entitäten in den Cache eingefügt werden. - Über diese API kann keine Datenbankabhängigkeit eingefügt werden, da keine Abfragen über den Cache erfolgen Insert. deshalb, die CreateDbDependency Eigentum in Caching-Optionen wird in diesem Aufruf ignoriert.
Das Insert
Methode verhält sich wie folgt:
Gehäuse | Verhalten |
---|---|
Entität ist im Cache nicht vorhanden | Fügt eine Entität zum Cache hinzu |
Im Cache vorhandene Entität | Aktualisiert die Entität im Cache |
Insert gibt einen Cache-Schlüssel zurück, der intern für jede im Cache gespeicherte Entität generiert wird. Dieser Cache-Schlüssel kann gespeichert werden, um ihn später zu Überprüfungszwecken oder zum Entfernen der Cache-Entität zu verwenden.
Beispiele
- Das folgende Beispiel fügt a ein Kundenentität zum Cache mit Abfrage-ID Kundenentität und für
Default
Priorität.
using (var database = new NorthwindContext())
{
var cust = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative",
CompanyName = "Blauer See Delikatessen"
};
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
Priority = Runtime.CacheItemPriority.Default
};
Cache cache = database.GetCache(); // get NCache instance
cache.Insert(cust, out string cacheKey, options);
string key = cacheKey; // can be saved for future use such as removing cache
}
- In diesem Beispiel wird dieselbe Entität zwischengespeichert, die in die Datenbank eingefügt wird:
using (var database = new NorthwindContext())
{
// Customer entity to be cached and stored to database
var customerEntity = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative ",
CompanyName = "Blauer See Delikatessen"
};
// Add customer entity to database
database.Customers.Add(customerEntity);
database.SaveChanges();
// Caching options for cache
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
Priority = Runtime.CacheItemPriority.Default,
};
// Add customer entity to cache
Cache cache = database.GetCache();
cache.Insert(cust, out string cacheKey, options);
string key = cacheKey; // can be saved for future use such as removing cache
}
Entfernen
Das Entfernen Die Methode entfernt Entitäten aus dem Cache, ohne sie aus der Datenbank zu löschen. Dies ist nützlich, wenn Sie vorübergehende Änderungen an den zwischengespeicherten Entitäten vorgenommen haben oder die Entitäten möglicherweise veraltet sind. Das Entfernen der Entitäten aus dem Cache ermöglicht das Laden neuer Daten aus einer Datenquelle, entweder über FromCache
or LoadIntoCache
Methoden.
Diese API verfügt über zwei Überladungen, eine, die eine Entität annimmt, während die andere den Cache-Schlüssel aufnimmt, der der Entität entspricht. Dieser Schlüssel wird während des zurückgegeben Insert/FromCache/LoadIntoCache
ruft auf, wenn die Entität zum Cache hinzugefügt wird und gespeichert werden kann.
public void Remove(object entity);
public void Remove(string cacheKey);
Beispiele
- Das folgende Beispiel entfernt die Cache-Entität basierend auf der ihr bereitgestellten Entität. Wenn es im Cache vorhanden ist, wird es entfernt.
using (var database = new NorthwindContext())
{
var cust = new Customers
{
CustomerId = "HANIH",
ContactName = "Hanih Moos",
ContactTitle = "Sales Representative",
CompanyName = "Blauer See Delikatessen"
};
ICache cache = database.GetCache();
cache.Remove(cust);
}
- Das folgende Beispiel verwendet den Cache-Schlüssel als Argument. Wenn eine Entität für den Schlüssel im Cache vorhanden ist, wird sie aus dem Cache entfernt.
using (var database = new NorthwindContext())
{
Cache cache = database.GetCache();
cache.Remove(cacheKey); // cacheKey saved during Insert()/FromCache()/LoadIntoCache() calls
}
RemoveByQueryIdentifier
Das RemoveByQueryIdentifier Die Methode entfernt alle Entitäten aus dem Cache basierend auf den angegebenen QueryIdentifier
in Caching-Optionen (beim Einfügen in den Cache). Wenn Entitäten mit der Kennung vorhanden sind, werden alle zugehörigen Entitäten aus dem Cache entfernt, jedoch nicht aus der eigentlichen Datenquelle.
using (var database = new NorthwindContext())
{
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
};
Cache cache = database.GetCache(); // get NCache instance
cache.RemoveByQueryIdentifier(options.QueryIdentifier);
}
Siehe auch
.NETZ: Alachisoft.NCache.EntityFrameworkCore und Alachisoft.NCache.Runtime.Caching Namensräume.