想要修改主表,并添加两条子表数据但是报错
YearPlan oldYearPlan = await _yearPlanRepository.GetYearPlanAndAudit(yearPlanSubmitAuditGet.yearplan_Id);
YearPlanAudit yearPlanAudit = oldYearPlan.yearplan_AuditList
.FirstOrDefault(ypa => ypa.yearaudit_Id == oldYearPlan.currentAuditId);
YearPlanAudit submitAudit = new YearPlanAudit
{
yearaudit_Id = Guid.NewGuid().ToString();
yearaudit_yearplan_Id = yearPlanAudit.yearaudit_yearplan_Id,
yearaudit_AuditName = "发起申请",
yearaudit_AuditUserId = nowuserId,
yearaudit_Sort = yearPlanAudit.yearaudit_Sort,
yearaudit_AuditResult = 2,
yearaudit_AuditDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
yearPlanAudit.yearaudit_Id = Guid.NewGuid().ToString();
yearPlanAudit.yearaudit_AuditResult = 1;
yearPlanAudit.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
oldYearPlan.audit_State = "201";
oldYearPlan.current_audit_UserId = yearPlanAudit.yearaudit_AuditUserId;
oldYearPlan.currentAuditId = yearPlanAudit.yearaudit_Id;
oldYearPlan.yearplan_SubmitUserId = nowuserId;
oldYearPlan.yearplan_SubmitDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
oldYearPlan.yearplan_AuditList.Add(submitAudit );
oldYearPlan.yearplan_AuditList.Add(yearPlanAudit);
await _yearPlanRepository.UpdateYearPlanAndAudit(oldYearPlan);
public async Task<int> UpdateYearPlanAndAudit(YearPlan yearPlan)
{
YearPlan year = await _dbContext.YearPlan
.Include(y => y.yearplan_AuditList)
.ThenInclude(ya => ya.yearaudit_CopyList)
.FirstOrDefaultAsync(y => y.yearplan_Id == yearPlan.yearplan_Id);
year.last_audit_Date = yearPlan.last_audit_Date;
year.current_audit_UserId = yearPlan.current_audit_UserId;
year.last_audit_UserId = yearPlan.last_audit_UserId;
year.audit_State = yearPlan.audit_State;
year.currentAuditId = yearPlan.currentAuditId;
year.yearplan_AuditList = yearPlan.yearplan_AuditList;
year.finalAuditId = yearPlan.finalAuditId;
year.yearplan_SubmitUserId = yearPlan.yearplan_SubmitUserId;
year.yearplan_SubmitDate = yearPlan.yearplan_SubmitDate;
return await _dbContext.SaveChangesAsync();
}
报错信息
System.InvalidOperationException: The property 'yearaudit_Id' on entity type 'YearPlanAudit' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key first delete the dependent and invoke 'SaveChanges' then associate the dependent with the new principal
实体类型'YearPlanAudit'上的属性'yearaudit_Id'是键的一部分,因此不能修改或标记为已修改。 要使用标识外键更改现有实体的主体,首先删除依赖项并调用'SaveChanges',然后将依赖项与新主体关联
尝试修改
在别的方法中,是可以更新关联表的,在可以更新关联表的数据是从前端获取的,不是从后端自己查出来(不知道会不会是这个原因)
我试过把new 一个AuditList来接,模仿是新的,还是不行。添加的两个,一个是New出来的一个是查出来的。如果我主子表分开去更新,主表只更新主表数据,子表只更新子表,则可以保存那个查出来,new出来的还是不行。
using (var transaction = await _dbContext.Database.BeginTransactionAsync())
{
await _yearPlanRepository.UpdateAuditYearPlan(oldYearPlan);
await _yearPlanRepository.InsertYearPlanAudit(yearPlanAudit);
await _yearPlanRepository.InsertYearPlanAudit(submitAudit);
transaction.Commit();
}
public async Task<int> UpdateAuditYearPlan(YearPlan yearPlan)
{
return await _dbContext.YearPlan.Where(y => y.yearplan_Id == yearPlan.yearplan_Id).UpdateAsync(y => new YearPlan
{
last_audit_Date = yearPlan.last_audit_Date,
current_audit_UserId = yearPlan.current_audit_UserId,
last_audit_UserId = yearPlan.last_audit_UserId,
audit_State = yearPlan.audit_State,
currentAuditId = yearPlan.currentAuditId,
finalAuditId = yearPlan.finalAuditId,
yearplan_SubmitUserId = yearPlan.yearplan_SubmitUserId,
yearplan_SubmitDate = yearPlan.yearplan_SubmitDate
});
}
public async Task<int> InsertYearPlanAudit(YearPlanAudit yearPlanAudit)
{
await _dbContext.AddAsync(yearPlanAudit);
return await _dbContext.SaveChangesAsync();
}