Tenho uma classe que gerencia diversas variáveis definidas por um usuário intermediário e os valores atribuídos por um usuário final, e em virtude da alta demanda de leitura e escrita desses valores era impossível ler e escrever diretamente
no banco de dados (ou mesmo utilizando EntityFramework, que é o meu caso) então a classe gerenciadora é 'armazenada' em cache e a cada 120 segundos de não-utilização os valores devem ser salvos na base de dados, para isso eu utilizo o CacheItemRemovedCallback,
o problema é que enquanto estávamos em desenvolvimento constante eu atualizava com frequência o código fonte no servidor e foi notado que os valores fornecidos pelo usuário final eram perdidos, ou seja: é bem provável que o método do CacheItemRemovedCallback
não esteja sendo executado quando o código é recompilado.
Meu código é o seguinte:
public static GerenciadorVariaveisAvaliacao GetGerenciadorFromCache(Contrato Contrato, ref bool VariaveisAtualizadas)
{
String cacheName = string.Format("Contrato{0}.CamposValores", Contrato.ID);
if (HttpContext.Current.Cache[cacheName] is GerenciadorVariaveisAvaliacao)
{
GerenciadorVariaveisAvaliacao gva = HttpContext.Current.Cache[cacheName] as GerenciadorVariaveisAvaliacao;
gva.Contrato = Contrato;
if (!VariaveisAtualizadas)
{
gva.AtualizarVariaveis();
VariaveisAtualizadas = true;
}
return gva;
}
else
{
// Gerenciador de Variaveis
GerenciadorVariaveisAvaliacao GerenciadorVariaveis = new GerenciadorVariaveisAvaliacao(Contrato);
HttpContext.Current.Cache.Insert(cacheName, GerenciadorVariaveis, null, DateTime.MaxValue, TimeSpan.FromSeconds(120), System.Web.Caching.CacheItemPriority.High,
(key, value, reason) => {
(value as GerenciadorVariaveisAvaliacao).Salvar();
});
VariaveisAtualizadas = true;
return GerenciadorVariaveis;
}
}
Existe alguma maneira mais elegante de resolver este problema? Pois o que estou fazendo hoje é: esperar até 3 da manha quando não tem ninguém online e fazer as atualizações, mas isso eventualmente irá se tornar inviável.
O endereço do meu sistema é www.contratosnahora.com.br
Flash