.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
相关产品推荐
相关产品推荐

