Manejador de caché de EF Core Context
NCacheLos métodos de extensión EF Core de también permiten flexibilidad al tratar con entidades directamente a través del caché. Estas API no involucran la fuente de datos, por lo que los datos se ingresan y eliminan directamente del caché sin modificar la fuente de datos. Estas API son útiles para datos que no deben cambiarse con frecuencia.
Note
Esta característica también está disponible en NCache Professional.
Para utilizar NCache Las API de EF Core incluyen los siguientes espacios de nombres en su aplicación:
NCache proporciona las siguientes API con fines de almacenamiento en caché:
Contexto central de EF: obtener instancia de caché
El identificador de caché se obtiene a través de la Obtener Caché, NCache Método de extensión EF Core en la versión extendida de su aplicación DbContext
clase.
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
Las llamadas a la API solo de caché se realizan a través de la Cache
envoltorio devuelto cuando el Obtener Caché se llama el método. El envoltorio de caché está asociado con el contexto en uso. Las entidades y sus respectivas solicitudes se verifican para sus tipos antes de que se invoquen las operaciones necesarias. Esta verificación se lleva a cabo con la ayuda del contexto en cuestión que se inicializa cuando el Obtener Caché se realiza la llamada. Por lo tanto, para ejecutar solicitudes con éxito, el contexto debe estar vivo (no eliminado) cuando se realizan las solicitudes. No hacerlo arrojará System.ObjectDisposedException
.
Por lo tanto, en el código, se recomienda realizar operaciones de caché únicamente dentro del contexto:
Importante:
Si el caché no se inicializa, se genera una excepción y todas las operaciones que deban realizarse fallarán hasta la inicialización del caché.
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
recuadro
El recuadro El método agrega la entidad directamente al caché sin ninguna dependencia de la base de datos. Es posible que esté almacenando un nuevo cliente en la base de datos y ya haya recuperado todos los clientes agregados anteriormente en su caché. En lugar de ejecutar una consulta LINQ más tarde para buscar el nuevo cliente de la fuente de datos en el caché, simplemente puede llamar recuadro inmediatamente después de que el cliente se agrega a la base de datos (cuando SaveChanges
se llama) con la misma instancia de la entidad utilizada para la inserción en la base de datos. Esto ahorra el costo de un viaje a la base de datos para una entidad.
Las entidades se pueden almacenar en caché con lo siguiente Opciones de almacenamiento en caché:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
Importante:
- El valor para
StoreAs
isSeparateEntities
, ya que las entidades se insertan en la caché como entidades separadas a través de esta API. - La dependencia de la base de datos no se puede inyectar a través de esta API porque no se realizan consultas sobre el caché a través de recuadro. por lo tanto, el CreateDbDependencyCreateDbDependency propiedad en Opciones de almacenamiento en caché se ignora dentro de esta llamada.
El Insert
El método se comporta de la siguiente manera:
Funda | Comportamiento |
---|---|
Entidad no existente en el caché. | Agrega entidad en el caché |
Entidad existente en el caché | Actualiza la entidad en el caché |
recuadro devuelve una clave de caché que se genera internamente para cada entidad que se almacena en el caché. Esta clave de caché se puede guardar para usarla más adelante con fines de verificación o para eliminar la entidad de caché.
Ejemplos
- El siguiente ejemplo inserta un Entidad del cliente al caché con el identificador de consulta Entidad del cliente y del
Default
prioridad.
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
}
- Este ejemplo almacena en caché la misma entidad que se inserta en la base de datos:
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
}
Eliminar
El Eliminar El método elimina entidades del caché, sin eliminarlas de la base de datos. Esto es útil si ha realizado algunos cambios temporales en las entidades almacenadas en caché o si las entidades pueden estar obsoletas. Eliminar las entidades del caché permite cargar datos nuevos desde una fuente de datos, ya sea a través del FromCache
or LoadIntoCache
métodos.
Esta API tiene dos sobrecargas, una que toma una entidad, mientras que la otra toma la clave de caché correspondiente a la entidad. Esta clave se devuelve durante el Insert/FromCache/LoadIntoCache
llama cuando la entidad se agrega al caché y se puede guardar.
public void Remove(object entity);
public void Remove(string cacheKey);
Ejemplos
- El siguiente ejemplo elimina la entidad de caché según la entidad que se le proporciona. Si existe en el caché, se eliminará.
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);
}
- El siguiente ejemplo toma la clave de caché como argumento. Si existe una entidad contra la clave en el caché, se eliminará del caché.
using (var database = new NorthwindContext())
{
Cache cache = database.GetCache();
cache.Remove(cacheKey); // cacheKey saved during Insert()/FromCache()/LoadIntoCache() calls
}
Eliminar por identificador de consulta
El Eliminar por identificador de consulta El método elimina todas las entidades de la memoria caché en función de la especificación QueryIdentifier
in Opciones de almacenamiento en caché (al insertar en el caché). Si existen entidades con el identificador, todas las entidades asociadas se eliminan de la caché pero no de la fuente de datos real.
using (var database = new NorthwindContext())
{
var options = new CachingOptions
{
QueryIdentifier = new Tag("CustomerEntity"),
};
Cache cache = database.GetCache(); // get NCache instance
cache.RemoveByQueryIdentifier(options.QueryIdentifier);
}
Vea también
.NETO: Alachisoft.NCache.EntityFrameworkCore y Alachisoft.NCache.Runtime.Caching espacios de nombres.