Configurar la caché central de EF
Esta sección se centra en las configuraciones necesarias para utilizar el NCache Métodos de extensión en una aplicación de Entity Framework y cree una caché de EF Core. Esto requiere serializar entidades y especificar NCache-configuraciones específicas en el DbContext
de sus aplicaciones EF.
Note
Esta característica también está disponible en NCache Professional.
NCache también proporciona a los usuarios la flexibilidad de sincronizar el caché si los elementos se invalidan debido a caducidad o desalojo. Esto mantiene los datos actualizados en la caché y reduce los viajes de la red a la base de datos para recuperar los elementos caducados.
Serialización de entidades en la caché de EFCore
Antes de configurar EF Core Cache, todas las entidades de cualquier modelo de base de datos deben serializarse para almacenarse en NCachePor lo tanto, deben marcarse como serializables.
[Serializable]
public partial class Customers
{
// Getters setters
}
Especificación de configuraciones de caché en DbContext
Para configurar EF Core Cache, NCache proporciona propiedades de caché configurables especificadas en el DbContext
. NCacheConfiguration
La clase permite a los usuarios especificar las propiedades y configurar el registrador para su aplicación:
Importante:
Debes configurar NCache existentes DbContext
o como punto de entrada para la aplicación; de lo contrario, arrojará una excepción indicando que el NCache no se ha proporcionado la configuración de inicialización.
- El siguiente ejemplo de código configura NCache para la aplicación EF en un plazo extendido
DbContext
clase conSqlServer
,DependencyType
yCacheConnectionOptions
especificando el puerto del clúster, el intervalo de reintento y los reintentos de conexión para la caché. Las configuracionesCacheId
yConnString
han sido especificados en el Aplicación.config archivo:
public partial class NorthwindContext : DbContext
{
...
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Parameters specified in App.config
string cacheId = ConfigurationManager.AppSettings["CacheId"];
string connString = ConfigurationManager.AppSettings["ConnString"];
bool errorEnabled = ConfigurationManager.AppSettings["ErrorEnabled"];
int bulkInsertChunkSize = ConfigurationManager.AppSettings["BulkInsertChunkSize"];
// Configure cache with connection retries and security
var options = new CacheConnectionOptions();
options.RetryInterval = 3;
options.ConnectionRetries = 2;
options.Port = 7801;
// Configure cache with security
options.UserCredentials.UserID = "john_smith";
options.UserCredentials.Password = "12345";
NCacheConfiguration.Configure(cacheId, DependencyType.SQLServer, errorEnabled, bulkInsertChunkSize, options);
optionsBuilder.UseSqlServer(connString);
}
}
Configuración de esquema predeterminada para la dependencia de SQL
Las consultas de dependencia de la base de datos difieren ligeramente de las consultas SQL normales. Por lo tanto, SQL Server no acepta estas consultas como válidas. Para evitar este problema, el dbo
debe agregarse antes del nombre de la tabla donde se establece el esquema predeterminado como dbo
. Esto se puede hacer agregando la siguiente línea de código en el OnModelCreating
método en el DbContext
clase:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("dbo"); // add this line for SQL dependency
// rest of the entity model code goes here
}
Esta consulta generada se puede utilizar para configurar la dependencia de la base de datos.
Opciones de configuración
Las opciones de configuración proporcionadas por NCacheConfiguration
son:
Titular | Tipo de Propiedad | Descripción |
---|---|---|
CacheId |
string |
Especifica el nombre de la caché que se utilizará para servir en la aplicación Entity Framework. Si no se especifica ningún nombre de caché, genera una excepción de configuración. |
DatabaseType |
DependencyType |
Enum para informar al caché sobre la base de datos que utiliza Entity Framework. Los valores son:Other = 0SqlServer = 1Oracle = 2Esta enumeración se ocupa de la invalidación de datos. Si los datos se actualizan en la base de datos, NCache elimina las consultas almacenadas en caché según las entidades afectadas para que se puedan entregar nuevos datos desde la fuente de datos en la siguiente consulta para evitar el uso de datos obsoletos. NOTA: Entity Framework Core no es compatible con Oracle, por lo que debe evitarse. NOTA: En el caso de DependencyType establecer como Other , no se crea la dependencia de la base de datos.NOTA: En el caso de DependencyType establecer como SqlServer , se debe habilitar un intermediario de servicios SQL en el servidor SQL, ya que la invalidación de datos requiere la dependencia de SQL. La dependencia de SQL también requiere el cambio de configuración especial para DbContext . |
InitParams |
CacheConnectionOptions |
Una clase que contiene parámetros personalizados para inicializar el caché con las configuraciones especificadas por el usuario. |
IsConfigured |
bool |
Especifica si DbContext se ha configurado con opciones de anulación o no. |
Método | Descripción |
---|---|
Configure |
Configura el caché que se utilizará para servir en la aplicación Entity Framework. Esto establece la configuración del caché de acuerdo con las propiedades especificadas por el usuario. Toma el ID de la caché, el tipo de dependencia de la base de datos y cualquier parámetro de inicialización opcional para la caché. |
ConfigureLogger |
Configura instancias de Microsoft.Extensions.Logging.ILogger vida Microsoft.Extensions.Logging.ILoggerFactory para registrar detalles de las operaciones del proveedor de almacenamiento en caché. |
IsLoggerEnabled |
Especifica si el registrador se ha habilitado en el nivel de registro especificado o no. |
errorEnabled |
Permite a los usuarios determinar si quieren lanzar una excepción para FromCache y LoadIntoCache consultas |
bulkInsertChunkSize |
Esto divide la mayor parte de las entidades en fragmentos más pequeños y actualiza la caché fragmento por fragmento. Por defecto, el bulkInsertChunkSize es 1000. |
Vea también
.NETO: Alachisoft.NCache.EntityFrameworkCore y Alachisoft.NCache.Runtime.Caching espacios de nombres.