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

.NET Core 5下FirstOrDefault()查询存在的数据库数据却返回null问题

问题原因

出现该问题的核心原因如下:

  • POST方法接收到的Incidence实例Notifications_Id字段未正确绑定:你的GET方法将Incidence对象返回给视图后,视图没有为Notifications_Id字段设置表单提交项(如隐藏域),导致POST提交时该字段没有被传值,模型绑定后自动取int类型的默认值0,用0去数据库匹配自然找不到对应数据。
  • 次要问题:代码中调用_context.SaveChangesAsync()时没有加await关键字,异步保存逻辑不会等待执行完成,可能导致后续跳转后数据未更新的问题。
  • 潜在问题:需确认AssignedTickets和Incidence实体类的Notifications_Id字段类型,是否和数据库中对应表的字段类型完全一致,类型不匹配导致的隐式转换也可能造成匹配失败。
修复方案

方案1:补充视图表单绑定

在EditTicket对应的视图中添加Notifications_Id的隐藏字段,确保POST提交时该值会被传递到后端:

<!-- 用Razor语法添加隐藏域 -->
<input type="hidden" asp-for="Notifications_Id" />

方案2:后端重新加载数据(更稳妥)

避免依赖前端传值,在POST方法中先根据传入incidence的主键重新从数据库加载完整数据,再拿加载后的数据做查询:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditTicket(Incidence incidence)
{
    if (incidence.Id == null)
    {
        return StatusCode(400);
    }
    // 从数据库加载完整的Incidence数据,避免前端漏传字段
    var dbIncidence = await _context.Incidences.FindAsync(incidence.Id);
    if (dbIncidence == null)
    {
        return StatusCode(401);
    }

    var role = _context.AssignedTickets.FirstOrDefault(a => a.Notifications_Id == dbIncidence.Notifications_Id);
    if (role == null)
    {
        return StatusCode(404);
    }
    role.Status = "C";
    role.ClosedOn = DateTime.Now;

    if (ModelState.IsValid)
    {
        DateTime Timeup = (DateTime)role.ClosedOn;
        DateTime Timedown = (DateTime)role.CreatedOn;
        long DiffTicks = (Timedown - Timeup).Ticks;
        role.TurnAroundTime = Math.Abs(DiffTicks).ToString();

        _context.Entry(incidence).State = EntityState.Modified;
        // 补充await等待异步保存完成
        await _context.SaveChangesAsync();
        return RedirectToAction("Dashboard", "Agent");
    }
    return View(incidence);
}

额外检查

确认AssignedTickets表和Incidences表的Notifications_Id字段类型,和实体类定义的类型完全一致,排除类型转换导致的匹配失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:51:01