解决方法 ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

解决方法EF框架出现  ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。 

可以使用Find查询后,再次修改 则解决问题

 try
                    {
                        //事物 多表操作,操作放在 TransactionScope
                        using (var trac = new TransactionScope())
                        {
                            //用find方法可解决
                            var uu = sp.user.Find(u.id);
                            sp.Entry<user>(uu).State = System.Data.EntityState.Detached;
                            //更新user数据表
                            sp.user.Attach(uu);
                     
                            uu.cishucount=uu.cishucount+ 1;
                            sp.SaveChanges();
                            userrecord usreord = new userrecord {
                                cardtype = u.cardtype,
                                userid=u.id,
                                addtime=dateTime,
                                usermanger=GlobalsInfo.admin,
                                cardlog="共打卡"+ u.cishucount + "次"
                            };
                            sp.userrecord.Add(usreord);
                            sp.SaveChanges();
                            trac.Complete();

                        }
                    }
                    catch (Exception ex) {

                        Transaction.Current.Rollback();
                        return MemberStateDto.setMemberStateDto(500, "数据出错,请重新打卡!");
                    }

  

猜你喜欢

转载自www.cnblogs.com/woaijingjing/p/11139361.html