Кэш в памяти с .Ядро NET EF выдает ошибку

#asp.net-core #.net-core #caching #entity-framework-core #asp.net-core-mvc

Вопрос:

У меня есть приложение .Net Core с EF, которое возвращает страницу под названием Customer в качестве домашней страницы. Но мне нужно показать страницу недоступности приложения (AppNotAvialable.cshmtl), когда пользователь пытается получить доступ к приложению в праздничный день(список праздников хранится в таблице)вместо страницы клиента. Вместо того, чтобы запрашивать таблицу списка праздников каждый раз при доступе к домашней странице, я пытаюсь использовать кэш в памяти, чтобы я мог хранить ответы на запросы в кэше и использовать их в контроллере. Я внедряю кэш в 1-й раз, и ниже приведено то, что я пробовал

 public class CustomersController : Controller
   {
      private readonly SurplusMouseContext _context;
      private readonly IMemoryCache memoryCache;

       .......................

  public async Task<IActionResult> Index(string sortOrder, string searchString,
                                           int? pageNumber, string currentFilter)
    {
        int holidaycheck;
        var timeUtc = DateTime.UtcNow;
        var easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
        var todayDt = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);

        bool isExist = memoryCache.TryGetValue("HolidayWk", out holidaycheck);
        if (!isExist)
        {
            holidaycheck = (from hc in _context.HolidayWeeks
                            where hc.HolidateDate.Date == todayDt.Date
                            select hc).Count();
            var cacheEntryOptions = new MemoryCacheEntryOptions()
                .SetSlidingExpiration(TimeSpan.FromHours(2));

            memoryCache.Set("HolidayWk", holidaycheck, cacheEntryOptions);
        }

        if (holidaycheck != 0)
        {
            return View("/Views/Customers/AppNotAvailable.cshtml");
        }
        else
        {
 

когда я пытаюсь отладить приложение, оно выдает ошибку, как показано ниже

введите описание изображения здесь

Может ли кто-нибудь, пожалуйста, подсказать, правильно ли я использую кэш в памяти здесь/что-то не хватает, и где я должен делать cacheMemory.Remove() , Любая помощь будет очень признательна

Комментарии:

1. Вы создали экземпляр MemoryCache экземпляра?

2. Вы связывали объекты в файле startup.cs, а затем использовали в конструкторе?

Ответ №1:

Первый шаг для проверки:

В вашем вопросе возможно, что вы не инициализировали MemoryCache объект в конструкторе.


Есть такой пример MemoryCache .

1 — Вы должны зарегистрироваться MemoryCache в таких сервисах, как этот:

 services.AddMemoryCache();
 

2 — Внедрите IMemoryCache интерфейс в свой контроллер и инициализируйте его.

 public class YourController : Controller
{
    private readonly IMemoryCache _memoryCache;
    public YourController(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache
    }
}
 

3 — Использование кэша памяти:

 public async Task<IActionResult> Index(string sortOrder, string searchString,
                                           int? pageNumber, string currentFilter)
{
    bool isExist = _memoryCache.TryGetValue("HolidayWk", out holidaycheck);
}
 

Комментарии:

1. Спасибо!!!! как/где мы можем очистить память.Удалить()