2012-06-27 62 views
1

當我嘗試更新具有與其關聯的集合的實體時,我收到以下消息。使用實體框架更新集合時出錯

「具有相同鍵的對象已經存在於ObjectStateManager。 的ObjectStateManager不能用相同的 鍵跟蹤多個對象」。

我通過參數接收具有新屬性的實體。 Eventos有一系列Clientes,whis配有Eventos。

這是代碼:

public int Modificar(Eventos eventos) 
{ 
    try 
    { 
     DBEntities DB = new DBEntities(); 
     Eventos objEvento = 
      DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento) 
         .SingleOrDefault(); 

     eventos.Porcentaje_Pagado = objEvento.Porcentaje_Pagado; 

     DB.Eventos.Attach(eventos); 
     DB.Eventos.ApplyCurrentValues(eventos); 

     DB.ObjectStateManager 
      .ChangeObjectState(eventos, System.Data.EntityState.Modified); 
     DB.SaveChanges(); 
     return eventos.Id_evento; 
    } 
    catch (Exception) 
    { 
     throw; 
    } 

} 

的問題是,在 「連接」。

問題是什麼?

*編輯**

它的工作部分,它保存「EVENTOS」新的數據,但我得到以下錯誤,當我嘗試更新asociated到EVENTOS「Clientes」的名單。

「無法設置'Eventos _...'類型的屬性'Clientes',因爲該集合已被設置爲EntityCollection。」

錯誤符合:objEvento.Clientes = eventos.Clientes;

代碼:

DBEntities DB = new DBEntities(); 
Eventos objEvento = DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento).SingleOrDefault(); 
objEvento.Porcentaje_Pagado = eventos.Porcentaje_Pagado; 
objEvento.Clientes = eventos.Clientes; 
DB.SaveChanges(); 

回答

0

你已經載有下面的代碼實體:

Eventos objEvento = 
     DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento) 
        .SingleOrDefault(); 

你將需要更新您已加載到對象上下文的實體。

更新objEvento然後申請並保存。

0

試試這個:

public int Modificar(Eventos eventos) 
{ 
    DBEntities DB = new DBEntities(); 
    Eventos objEvento = 
     DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento) 
        .SingleOrDefault(); 


    objEvento.Porcentaje_Pagado = eventos.Porcentaje_Pagado; 

    DB.SaveChanges(); 

    return objEvento.Id_evento; 

} 
+0

它的工作部分,它保存的新數據「EVENTOS」,但我得到以下錯誤,當我嘗試更新asociated到EVENTOS「Clientes」的名單。 「無法設置'Eventos _...'類型的屬性'Clientes',因爲集合已經設置爲EntityCollection。」 錯誤符合:objEvento.Clientes = eventos.Clientes; DBEntities DB = new DBEntities(); EventObjEvento = DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento).SingleOrDefault(); objEvento.Porcentaje_Pagado = eventos.Porcentaje_Pagado; objEvento.Clientes = eventos.Clientes; DB.SaveChanges(); –

+0

這裏的問題是你有一個集合,你試圖替換它,而不是在集合中添加或更新elemenet。 –

+0

你如何更新收藏?我需要更新屬於特定「Eventos」的「Clientes」集合 –