【问题标题】:Update Action Trouble更新操作问题
【发布时间】:2012-04-14 08:19:23
【问题描述】:

这是我的更新操作:

        public void etat(string id)
    {

            Models.J2VEntities entity = new Models.J2VEntities();

            Models.user model = (from p in entity.user
                                 where p.iduser == id
                                 select p).SingleOrDefault();

            model.IsActive = !(model.IsActive);
            entity.user.AddObject(model);
            entity.ObjectStateManager.ChangeObjectState(model, System.Data.EntityState.Modified);
            entity.SaveChanges();
            RedirectToAction("Index", "Admin");
    }

当我执行时,我得到了这个错误:

System.InvalidOperationException:ObjectStateManager 中已存在具有相同键的对象。现有对象处于已修改状态。如果在状态中添加了对象,则可以将其添加回 ObjectStateManager。

在这一行:entity.user.AddObject(model);

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    试试这个:

    public void etat(string id){
     using( var entity = new Models.J2VEntities()){
        Models.user model = (from p in entity.user
                                 where p.iduser == id
                                 select p).SingleOrDefault();
        model.IsActive = !(model.IsActive);
        entity.user.Attach(model);
        entity.Entry(model).State = EntityState.Modified;
        entity.SaveChanges();
     }
    }
    

    using 将确保您的连接被正确处理和关闭,以确保您没有内存泄漏或不需要的打开连接。

    【讨论】:

    • 这条线 entity.Entry(model).State = EntityState.Modified; 对我不起作用,并带有红色下划线。
    • @Chlebta - 该行的哪一部分有下划线?尝试右键单击红色,然后选择“Resolve ->”选项,然后我猜你可能必须包含一个命名空间 - 很可能是using System.Data;
    • 是的,我做到了,但条目总是加下划线,当我继续时,他告诉我为它生成一个存根
    • @Chlebta - 这一定是因为您使用的是不同的 API(即 ObjectContext API)。将条目替换为entity.ObjectStateManager.ChangeObjectState(model, EntityState.Modified);
    • 我在这一行 Can not attach the object, because it is already in the object context. An object can be attached again that when in an unmodified state. 收到此错误 entity.user.Attach(model);
    【解决方案2】:

    以这种方式爱戴:

    using (var entity = new Models.J2VEntities())
                {
                    Models.user model = (from p in entity.user
                                         where p.iduser == id
                                         select p).SingleOrDefault();
                    model.IsActive = !(model.IsActive);
                    entity.user.ApplyCurrentValues(model);
                    entity.SaveChanges();
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多