.NET 6 Core API按Week_nb查询触发空引用异常问题求助
问题原因与解决方法
错误原因
你的wareh_KPI_IN实体类标记了[Keyless]特性,这会让EF Core将其识别为无键实体。而FindAsync方法是EF Core专门用于通过主键查找实体的API,无键实体没有主键定义,调用该方法会触发内部空引用异常。
解决方法
替换FindAsync为Linq过滤查询,根据Week_nb字段筛选数据,具体有两种实现方式:
方式1:返回单个匹配结果(适用于Week_nb唯一的场景)
[HttpGet("{Week_nb}")] public async Task<IActionResult> Get(int Week_nb) { var wareh_KPI_IN = await _esmDashboardContext.wareh_KPI_IN .FirstOrDefaultAsync(x => x.Week_nb == Week_nb); // 无匹配数据时返回404,更符合REST API规范 if (wareh_KPI_IN == null) { return NotFound(); } return Ok(wareh_KPI_IN); }
方式2:返回所有匹配结果(适用于Week_nb不唯一的场景)
[HttpGet("{Week_nb}")] public async Task<IActionResult> Get(int Week_nb) { var wareh_KPI_INs = await _esmDashboardContext.wareh_KPI_IN .Where(x => x.Week_nb == Week_nb) .ToListAsync(); return Ok(wareh_KPI_INs); }
补充说明
无键实体通常用于映射视图、临时结果集等没有主键的数据源,EF Core不支持对无键实体使用FindAsync、Update、Delete等依赖主键的操作,所有数据操作都需要通过Linq查询来实现。
内容的提问来源于stack exchange,提问作者Chanka1021
相关产品推荐
相关产品推荐

