You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET EF Core集成In-Memory Cache实现假期判断时抛出错误如何修复?

错误原因与修复方案

你截图中的空引用错误是因为IMemoryCache实例没有被正确注入到控制器,调用TryGetValue时memoryCache为null导致的,按以下步骤修复:

  1. 首先注册内存缓存服务:
    • .NET 6+ 版本在Program.cs中添加配置:
      builder.Services.AddMemoryCache();
      
    • .NET 5及更早版本在Startup.cs的ConfigureServices方法中添加配置:
      services.AddMemoryCache();
      
  2. 完善控制器构造函数的注入赋值:
    你当前只声明了IMemoryCache私有字段,没有在构造函数中对字段赋值,修改构造函数如下:
    public CustomersController(SurplusMouseContext context, IMemoryCache memoryCache)
    {
        _context = context;
        this.memoryCache = memoryCache;
    }
    

缓存逻辑优化建议

你当前的缓存实现存在跨天判断错误的风险,建议做如下调整:

  • 把滑动过期策略改为绝对过期到美东时间当日23:59:59,避免前一天生成的缓存跨天后依然生效,导致节假日判断错误:
    var expireTime = new DateTime(todayDt.Year, todayDt.Month, todayDt.Day, 23, 59, 59);
    var cacheEntryOptions = new MemoryCacheEntryOptions()
        .SetAbsoluteExpiration(expireTime);
    
  • 优化EF查询逻辑,不需要统计所有匹配的节假日数量,只要判断是否存在即可,异步查询也符合你方法的async声明:
    holidaycheck = await _context.HolidayWeeks.AnyAsync(hc => hc.HolidateDate.Date == todayDt.Date) ? 1 : 0;
    

Remove()方法调用时机

你的业务场景下绝大多数情况不需要主动调用Remove()方法,缓存会在当日结束后自动过期失效。只有当你在后台手动修改了当日的节假日配置数据时,才需要主动调用memoryCache.Remove("HolidayWk")清除缓存,让最新的节假日配置立即生效,不需要等待缓存过期。

内容的提问来源于stack exchange,提问作者user4912134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:07