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

.NET Core 3.1中新增数据库字段后数据无法更新的问题

.NET Core 3.1新增数据库字段无法更新数据

问题描述

已在ApplicationRequest模型和ApolloProSoContext中新增StudentDetailUserDefinedHealth1字段,执行update-database无报错,但对实体赋值后调用SaveChanges(),该字段数据始终未同步到ProSolution数据库。

相关代码

ApplicationRequest.cs

public string ResidenceAreaHesacode { get; set; }
public string PreferredPronounId { get; set; }
public bool? IsHomeFees { get; set; }
public int? HomeFeeEligibilityId { get; set; }
public string StudentDetailUserDefinedHealth1 { get; set; }

ApolloService.cs

if(myApp.ALS_EHCP == true)
{
    myApplicationRequest.StudentDetailUserDefinedHealth1 = "Declared";
}
else
{
    myApplicationRequest.StudentDetailUserDefinedHealth1 = "Not Declared";
}
_ApolloProSoContext.ApplicationRequest.Add(myApplicationRequest);
_ApolloProSoContext.SaveChanges();
Log.Debug("App injected OK");
return "OK";

ProSolutionContext.cs

public partial class ApolloProSoContext : DbContext
{
    public ApolloProSoContext()
    {
    }

    public ApolloProSoContext(DbContextOptions<ApolloProSoContext> options)
        : base(options)
    {
    }

    public virtual DbSet<ApplicationRequest> ApplicationRequest { get; set; }
}

解决方法

  • 修正实体操作方法
    当前使用Add()会将实体标记为新增状态,若myApplicationRequest是数据库中已存在的实体,需替换为Update():

    // 替换Add为Update
    _ApolloProSoContext.ApplicationRequest.Update(myApplicationRequest);
    _ApolloProSoContext.SaveChanges();
    

    更推荐先查询获取现有实体再修改(避免全字段覆盖):

    var existingRequest = _ApolloProSoContext.ApplicationRequest.Find(myApplicationRequest.Id);
    if(existingRequest != null)
    {
        existingRequest.StudentDetailUserDefinedHealth1 = myApp.ALS_EHCP ? "Declared" : "Not Declared";
        _ApolloProSoContext.SaveChanges();
    }
    
  • 确认迁移有效性
    执行Add-Migration AddStudentDetailUserDefinedHealth1生成迁移文件,检查文件中是否包含StudentDetailUserDefinedHealth1字段的创建语句,再执行Update-Database确保迁移已应用。直接查看数据库表结构,确认该字段是否存在。

  • 检查实体主键配置
    确保ApplicationRequest模型包含主键属性(如public int Id { get; set; }),EF Core依赖主键识别实体是否已存在。若主键缺失,EF Core无法区分新增/更新操作。

  • 验证SaveChanges执行结果
    捕获SaveChanges()返回的受影响行数,确认是否有数据被修改:

    int affectedRows = _ApolloProSoContext.SaveChanges();
    Log.Debug($"受影响行数:{affectedRows}");
    

    若返回0,说明EF Core未检测到实体变更,需检查实体跟踪状态或赋值逻辑是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:35:05