2015-03-25 58 views
1
public ActionResult Event_History(int id = 0) 
    { 
     //set into false the active flag of the event 
     Events_Info_tbl events = db.Events_Info_tbl.Find(id); 
     events.is_active = false; 
     db.Entry(events).State = EntityState.Modified; 

     //set the category under this event into inactive 
     List<Events_Category_tbl> category = new List<Events_Category_tbl>(); 
     category = db.Events_Category_tbl.Where(x=>x.events_info_id==id).ToList();   
     foreach(var i in category){ 
      Events_Category_tbl cat = new Events_Category_tbl(); 
      cat.is_active = false; 
      db.Entry(cat).State = EntityState.Modified; 
     } 

     db.SaveChanges(); 

     TempData["MessageAlert"] = "Event is save in history!"; 

     return RedirectToAction("Index"); 


    } 

Iam计划设置为非活动状态,所有类别都属于该特定事件,但是当我尝试运行此代码时显示错误“具有相同键的对象已存在于ObjectStateManager。ObjectStateManager不能使用相同的密钥跟踪多个对象。“指向我的这部分代码db.Entry(cat).State = EntityState.Modified;更新数据库中的数据列表

+0

您不需要手动更改状态,它由EF处理 – Peyman 2015-03-25 00:18:56

回答

0

下面的代码尝试创建新的对象,并保存在数据库,所有新对象有这就是为什么给这个错误的编号相同:

Events_Category_tbl cat = new Events_Category_tbl(); 
cat.is_active = false; 
db.Entry(cat).State = EntityState.Modified; 

你并不需要创建新的对象,只需更新检索的实体:

public ActionResult Event_History(int id = 0) 
{ 
    //set into false the active flag of the event 
    var events = db.Events_Info_tbl.Find(id); 
    events.is_active = false;   

    //set the category under this event into inactive 
    var category = db.Events_Category_tbl.Where(x=>x.events_info_id==id).ToList();   
    foreach(var cat in category){ 
     cat.is_active = false; 
    } 

    db.SaveChanges(); 

    TempData["MessageAlert"] = "Event is save in history!"; 

    return RedirectToAction("Index"); 


} 
0
 foreach(var i in category){ 
     Events_Category_tbl cat = new Events_Category_tbl(); 
     cat.is_active = false; 
     db.Entry(cat).State = EntityState.Modified; 
    } 

这部分没有任何意义。您不应创建Events_Category_tbl的新实例。

而应该只是

foreach(var i in category){ 
     i.is_active = false; 
    } 
0

类别表中的可重复自己....请更换:

db.Events_Category_tbl.Where(x=>x.events_info_id==id).ToList() 

db.Events_Category_tbl.Where(x=>x.events_info_id==id).Distinct().ToList() 

这样,你将确保每个项目只重复一次