解决方案 »

  1.   

    如果在修改前,重新查一遍数据库,SaveChanges的时候会报错:ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
    请大家指点一下迷津
      

  2.   

    我写的代码主要如下:        public T UpdateEntity(T entity)
            {
                if (entity != null)
                {
                    db.CreateObjectSet<T>().Attach(entity);
                    db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
                }
                return entity;
            }        [HttpPost]
            public ActionResult EditUserInfo(UserInfo userInfo)
            {
                UserInfo oldUserInfo = userInfoService.LoadEntities(u => u.ID == userInfo.ID).FirstOrDefault();
                oldUserInfo.ModifiedTime = userInfo.ModifiedTime;
                userInfoService.UpdateEntity(userInfo);
                return Content("ok");
            }这样就报了“ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”错误,请问怎么解决呢?有好的修改办法吗?
      

  3.   

    报的错不是这个,我刚刚写错代码了,
    UserInfo oldUserInfo = userInfoService.LoadEntities(u => u.ID == userInfo.ID).FirstOrDefault();            
    oldUserInfo.ModifiedTime = userInfo.ModifiedTime;            userInfoService.UpdateEntity(oldUserInfo);
    应该是上样这样的代码,报的错是“无法附加此对象,因为它已经在对象上下文中。对象只有在处于未更改状态时才能重新附加。”
      

  4.   


     HBSIEntities entity = new HBSIEntities();
                /*更改表的实体,注意在最后加上了“Id=7”,
                 标识要更改实体表T_UserInfo中Id=7的行实体,
                 为字段重新赋值即可*/
                T_UserInfo userinforow = new T_UserInfo()
                {
                    UserName = "zbj",
                    Pwd = "234567",
                    NickName = "二师兄",
                    Address = "高老庄",
                    Sfzh = "123452223333444423",
                    Id=7
                };
                entity.T_UserInfo.Attach(userinforow); //////这句去掉  因为你查询的时候这个对象已经Attach过了
                entity.ObjectStateManager.ChangeObjectState(userinforow,EntityState.Modified);
                entity.SaveChanges();
      

  5.   

    不行中,去掉Attach就更新不了了
      

  6.   

    HBSIEntities entity = new HBSIEntities();
    T_UserInfo userinforow = new entity.Find(7); //获取原对象
    userinforow.NickName = "二师兄"; //更新字段
    entity.SaveChanges(); //保存
      

  7.   

    抱歉,上面的代码错了一个地方,改一下:HBSIEntities entity = new HBSIEntities();
    T_UserInfo userinforow =entity.Find(7); //获取原对象
    userinforow.NickName = "二师兄"; //更新字段
    entity.SaveChanges(); //保存
      

  8.   


    这样 using (HBSIEntities entity= new HBSIEntities ())
     {
    T_UserInfo userinforow=entity.T_UserInfo.FirstOrDefault(t=>t.id==7);//你查出这个实体
    if(userinforow==null)
    {
    return new T_UserInfo();
    }
    userinforow.NickName = "二师兄";//你的更新的
    entity.SaveChanges();//这样就会自动帮你修改
    }
      

  9.   

    最后验证,a346729576是对的,查询的时候这个对象已经Attach过了,所以要去掉,当然,后面两位说的也是对的。
      

  10.   


    public ActionResult ModifyPage(Models.Student model)
            {
                try
                {
                    DbEntityEntry entry = db.Entry<Models.Student>(model);
                    entry.State = System.Data.EntityState.Unchanged;
                    entry.Property("Name").IsModified = true;
                    entry.Property("CId").IsModified = true;
                    entry.Property("Gender").IsModified = true;
                    db.SaveChanges();
                    return Content("<script>alert('修改成功!');window.location='/Stu/Index'</script>");
                }
                catch (Exception e)
                {
                    return Content("<script>alert('失败!'" + e.Message + ");window.location='/Stu/Index'</script>");
                }
            }
      

  11.   


    db.Students.AsNoTracking().Single(x => x.Id ==Id);
    http://www.cnblogs.com/charje/archive/2012/02/27/entity_framework_objectstatemanager.html