bug制造机1号 2021-11-19 15:44 采纳率: 100%
浏览 18
已结题

EF Core 添加关联

想要修改主表,并添加两条子表数据但是报错
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();
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月27日
    • 创建了问题 11月19日

    悬赏问题

    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度
    • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
    • ¥15 ETLCloud 处理json多层级问题
    • ¥15 matlab中使用gurobi时报错
    • ¥15 这个主板怎么能扩出一两个sata口
    • ¥15 不是,这到底错哪儿了😭
    • ¥15 2020长安杯与连接网探
    • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么