Poignée de cache du contexte EF Core
NCacheLes méthodes d'extension EF Core de permettent également une certaine flexibilité lors du traitement des entités directement via le cache. Ces API n'impliquent pas la source de données, les données sont donc directement saisies et supprimées du cache sans modifier la source de données. De telles API sont pratiques pour les données qui ne doivent pas être modifiées fréquemment.
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Utiliser NCache Les API EF Core incluent les espaces de noms suivants dans votre application :
NCache fournit les API suivantes à des fins de mise en cache :
Contexte principal EF : obtenir une instance de cache
Le descripteur de cache est obtenu via le ObtenirCache, NCache Méthode d’extension EF Core sur la version étendue de votre application DbContext
classe.
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
Les appels d'API de cache uniquement sont effectués via le Cache
l'emballage est revenu lorsque le ObtenirCache méthode est appelée. L'encapsuleur de cache est associé au contexte utilisé. Les entités et leurs demandes respectives sont vérifiées pour leurs types avant que les opérations nécessaires ne soient appelées. Cette vérification s'effectue à l'aide du contexte présent qui est initialisé lorsque le ObtenirCache l'appel est passé. Par conséquent, pour exécuter avec succès les requêtes, le contexte doit être actif (et non supprimé) lorsque les requêtes sont effectuées. Ne pas le faire jettera System.ObjectDisposedException
.
Ainsi, dans le code, il est conseillé d'effectuer des opérations en cache uniquement dans le contexte :
Important
Si le cache n'est pas initialisé, il lève une exception et toutes les opérations qui doivent être effectuées échoueront jusqu'à l'initialisation du cache.
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
insérer
Les insérer La méthode ajoute l'entité directement au cache sans aucune dépendance sur la base de données. Vous stockez peut-être un nouveau client dans la base de données et avez déjà récupéré tous les clients précédemment ajoutés dans votre cache. Au lieu d'exécuter une requête LINQ ultérieurement pour récupérer le nouveau client de la source de données dans le cache, vous pouvez simplement appeler insérer juste après que le client soit ajouté à la base de données (lorsque SaveChanges
est appelé) avec la même instance de l’entité utilisée pour l’insertion dans la base de données. Cela permet d'économiser le coût d'un déplacement dans la base de données pour une entité.
Les entités peuvent être mises en cache avec les éléments suivants Options de mise en cache:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
Important
- La valeur pour
StoreAs
isSeparateEntities
, car les entités sont insérées dans le cache en tant qu'entités distinctes via cette API. - La dépendance de la base de données ne peut pas être injectée via cette API car aucune requête n'est effectuée sur le cache via insérer. Par conséquent, la CreateDbDependencyCreateDbDependency propriété à Options de mise en cache est ignoré dans cet appel.
Les Insert
la méthode se comporte comme suit :
Boitier | Comportement |
---|---|
Entité n'existant pas dans le cache | Ajoute une entité dans le cache |
Entité existant dans le cache | Met à jour l'entité dans le cache |
insérer renvoie une clé de cache qui est générée en interne pour chaque entité stockée dans le cache. Cette clé de cache peut être enregistrée pour être utilisée ultérieurement à des fins de vérification ou pour supprimer l'entité de cache.
Exemples
- L'exemple suivant insère un Entité Client au cache avec l'identifiant de requête Entité Client et par
Default
priorité.
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
}
- Cet exemple met en cache la même entité insérée dans la base de données :
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
}
Effacer
Les Effacer La méthode supprime les entités du cache, sans les supprimer de la base de données. Ceci est utile si vous avez apporté des modifications temporaires aux entités mises en cache ou si les entités peuvent être obsolètes. La suppression des entités du cache permet de charger de nouvelles données à partir d'une source de données, soit via le FromCache
or LoadIntoCache
méthodes.
Cette API possède deux surcharges, l'une qui prend une entité, tandis que l'autre prend la clé de cache correspondant à l'entité. Cette clé est restituée lors de la Insert/FromCache/LoadIntoCache
appelle lorsque l'entité est ajoutée au cache et peut être enregistrée.
public void Remove(object entity);
public void Remove(string cacheKey);
Exemples
- L'exemple suivant supprime l'entité de cache en fonction de l'entité qui lui est fournie. S'il existe dans le cache, il sera supprimé.
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);
}
- L'exemple suivant prend la clé de cache comme argument. Si une entité associée à la clé existe dans le cache, elle sera supprimée du cache.
using (var database = new NorthwindContext())
{
Cache cache = database.GetCache();
cache.Remove(cacheKey); // cacheKey saved during Insert()/FromCache()/LoadIntoCache() calls
}
RemoveByQueryIdentifier
Les RemoveByQueryIdentifier La méthode supprime toutes les entités du cache en fonction de la valeur spécifiée QueryIdentifier
in Options de mise en cache (lors de l'insertion dans le cache). Si des entités avec l'identifiant existent, toutes les entités associées sont supprimées du cache mais pas de la source de données réelle.
using (var database = new NorthwindContext())
{
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
};
Cache cache = database.GetCache(); // get NCache instance
cache.RemoveByQueryIdentifier(options.QueryIdentifier);
}
Voir aussi
.RAPPORTER: Alachisoft.NCache.EntityFrameworkCore ainsi que le Alachisoft.NCache.Runtime.Caching espaces de noms.