zoukankan      html  css  js  c++  java
  • The instance of entity type 'xxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

    具体详细错误信息:The instance of entity type 'xxx' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.

    代码片段:

                    foreach (var item in list)
                    {
                        var func = this.GetCodeCheckFunction(item);
                        var gauge = UnitWork.FindSingle(func);
    
                        if (gauge == null)
                        {
                            //新增
                            UnitWork.Add(item);
                        }
                        else
                        {
                            //修改
                            gauge.GaugeType = item.GaugeType;
                            gauge.ModifiedBy = _auth.GetCurrentUser().User.Id;
                            gauge.ModifiedTime = DateTime.Now;
                            UnitWork.Update(gauge);
                        }
                        UnitWork.Save();
                    }

    介绍下业务场景:导入时excel中存在重复数据。更新数据用的UnitWork。

    上面的报错信息很明显了,它告诉我们一条数据已经被trace了,不能重复trace,只要我们把这条被trace的数据取消就行了。

    下面是修改后的代码:

                    foreach (var item in list)
                    {
                        var func = this.GetCodeCheckFunction(item);
                        var gauge = _dbContext.MesInfoGauges.FirstOrDefault(func);
    
                        if (gauge == null)
                        {
                            //新增
                            _dbContext.MesInfoGauges.Add(item);
                            _dbContext.SaveChanges();
                            _dbContext.Entry(item).State = EntityState.Detached;
                        }
                        else
                        {
                            //修改
                            gauge.GaugeType = item.GaugeType;
                            gauge.ModifiedBy = user.Id;
                            gauge.ModifiedTime = DateTime.Now;
                            _dbContext.MesInfoGauges.Update(gauge);
                            _dbContext.SaveChanges();
                            _dbContext.Entry(gauge).State = EntityState.Detached;
                        }
                    }

    保存后,修改当前数据的Entry状态为Detached。

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/subendong/p/12401264.html
Copyright © 2011-2022 走看看