2012-04-12 62 views
0

这是我的更新操作:更新操作麻烦

 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"); 
    } 

当我excutet我得到这个错误:

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

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

回答

0

Sloved以这种方式:

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(); 
      } 
0

试试这个:

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将确保您的连接设置和正确关闭,以确保你没有内存泄漏或不需要开连接。

+0

此行'entity.Entry(模型).STATE = EntityState.Modified;'我这么想的工作强调了与红色。 – Chlebta 2012-04-12 23:27:33

+0

@Chlebta - 该行的哪一部分加下划线?尝试右键单击红色,然后选择“解决 - >”选项,然后我猜你可能不得不包含一个命名空间 - 最有可能的是'使用System.Data;'。 – 2012-04-12 23:30:39

+0

是的,我做了,但入口总是加下划线,当我继续下去时,他让我为它生成一个存根 – Chlebta 2012-04-12 23:33:11