Identificador de cache do contexto do EF Core
NCacheOs métodos de extensão do EF Core também permitem flexibilidade ao lidar com entidades diretamente por meio do cache. Essas APIs não envolvem a fonte de dados, portanto, os dados são inseridos e removidos diretamente do cache sem modificar a fonte de dados. Essas APIs são úteis para dados que não devem ser alterados com frequência.
Note
Este recurso também está disponível em NCache Professional.
Utilizar NCache APIs EF Core incluem os seguintes namespaces em seu aplicativo:
NCache fornece as seguintes APIs para fins de armazenamento em cache:
Contexto principal do EF: obter instância de cache
O identificador de cache é obtido através do Obter Cache, NCache Método de extensão do EF Core no estendido do seu aplicativo DbContext
classe.
public partial class NorthwindContext : DbContext
{
// Class configures cache with NCacheConfiguration.Configure() method
}
Chamadas de API somente de cache são feitas por meio do Cache
invólucro retornado quando o Obter Cache método é chamado. O wrapper de cache está associado ao contexto em uso. As entidades e suas respectivas solicitações são verificadas quanto aos seus tipos antes que as operações necessárias sejam invocadas. Essa verificação ocorre com a ajuda do contexto em questão que é inicializado quando o Obter Cache chamada é feita. Conseqüentemente, para executar solicitações com sucesso, o contexto deve estar ativo (não descartado) quando as solicitações são feitas. Não fazer isso irá lançar System.ObjectDisposedException
.
Assim, no código, é aconselhável realizar operações somente de cache dentro do contexto:
importante
Se o cache não for inicializado, ele lançará uma exceção e todas as operações que precisam ser executadas falharão até a inicialização do cache.
using (var context = new NorthwindContext())
{
Cache cache = context.GetCache(); // get NCache instance
// Perform cache only operations
}
inserção
A inserção adiciona a entidade diretamente ao cache sem qualquer dependência do banco de dados. Você pode estar armazenando um novo cliente no banco de dados e já ter obtido todos os clientes adicionados anteriormente em seu cache. Em vez de executar uma consulta LINQ posteriormente para buscar o novo cliente da fonte de dados no cache, você pode simplesmente chamar inserção logo após o cliente ser adicionado ao banco de dados (quando SaveChanges
é chamado) com a mesma instância da entidade usada para inserção no banco de dados. Isso economiza o custo de uma viagem ao banco de dados para uma entidade.
As entidades podem ser armazenadas em cache com o seguinte Opções de cache:
QueryIdentifier
Priority
AbsoluteExpirationTime
SlidingExpirationTime
importante
- O valor para
StoreAs
isSeparateEntities
, à medida que as entidades são inseridas no cache como entidades separadas por meio desta API. - A dependência do banco de dados não pode ser injetada por meio dessa API porque não há consultas feitas no cache por inserção. Portanto, o CriarDbDependência propriedade em Opções de cache é ignorado nesta chamada.
A Insert
método se comporta da seguinte maneira:
Estudos de | Comportamento |
---|---|
Entidade não existente no cache | Adiciona entidade ao cache |
Entidade existente no cache | Atualiza a entidade no cache |
inserção retorna uma chave de cache que é gerada internamente para cada entidade armazenada no cache. Essa chave de cache pode ser salva para ser usada posteriormente para fins de verificação ou para remover a entidade de cache.
Exemplos
- O exemplo a seguir insere um Entidade do Cliente para o cache com identificador de consulta Entidade do Cliente e os votos de
Default
prioridade.
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 exemplo armazena em cache a mesma entidade que está sendo inserida no banco de dados:
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
A Eliminar O método remove entidades do cache, sem excluí-las do banco de dados. Isso é útil se você tiver feito algumas alterações temporárias nas entidades armazenadas em cache ou se as entidades estiverem obsoletas. A remoção das entidades do cache permite carregar dados novos de uma fonte de dados, seja por meio do FromCache
or LoadIntoCache
métodos.
Esta API possui duas sobrecargas, uma que utiliza uma entidade, enquanto a outra utiliza a chave de cache correspondente à entidade. Esta chave é retornada durante o Insert/FromCache/LoadIntoCache
chamadas quando a entidade é adicionada ao cache e pode ser salva.
public void Remove(object entity);
public void Remove(string cacheKey);
Exemplos
- O exemplo a seguir remove a entidade de cache com base na entidade fornecida a ela. Se existir no cache, será removido.
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);
}
- O exemplo a seguir usa a chave de cache como argumento. Se existir uma entidade contra a chave no cache, ela será removida do cache.
using (var database = new NorthwindContext())
{
Cache cache = database.GetCache();
cache.Remove(cacheKey); // cacheKey saved during Insert()/FromCache()/LoadIntoCache() calls
}
RemoveByQueryIdentifier
A RemoveByQueryIdentifier remove todas as entidades do cache com base no especificado QueryIdentifier
in Opções de cache (ao inserir no cache). Se existirem entidades com o identificador, todas as entidades associadas serão removidas do cache, mas não da fonte de dados 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);
}
Veja também
.INTERNET: Alachisoft.NCache.EntityFrameworkCore e Alachisoft.NCache.Runtime.Cache espaços para nome.