У меня есть приложение .NET Core 2.1.В Startup.cs
методе конфигурации я использую:
services.AddDbContext<ApplicationDbContext>(options =
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
...
services.AddMemoryCache();
Затем в моем контроллере:
public class DropDownListController : Controller
{
private readonly ApplicationDbContext _context;
private readonly IMemoryCache _memoryCache;
private const string ProvidersCacheKey = "providers";
private const string AgenciesCacheKey = "agencies";
public DropDownListController(ApplicationDbContext context, IMemoryCache memoryCache )
{
_context = context;
_memoryCache = memoryCache;
}
}
и в контроллере также метод для получения выпадающего списка:
public JsonResult GetProvider()
{
IEnumerable<DropDownListCode.NameValueStr> providerlist;
if (_memoryCache.TryGetValue(ProvidersCacheKey, out providerlist))
{
return Json(providerlist);
}
else
{
MemoryCacheEntryOptions cacheExpirationOptions = new MemoryCacheEntryOptions();
cacheExpirationOptions.AbsoluteExpiration = DateTime.Now.AddDays(30);
cacheExpirationOptions.Priority = CacheItemPriority.Normal;
DropDownListCode um = new DropDownListCode(_context);
var result = um.GetProviderList();
_memoryCache.Set(ProvidersCacheKey, result);
return Json(result);
}
}
Когда я устанавливаю точку останова на линии:
return Json(providerlist);
Я вижу, что ProvidersCacheKey
находится в _memoryCache
, но не имеет значения.
Что случилось с данными?
Когда я делаю Quick Watch на _memoryCache
, я вижу, что объект DbContext
был уничтожен.Но как это может быть, код работает нормально, но объект кэша не содержит данных, которые я сохранил в нем.
Любая помощь будет принята.