1

当我尝试更新具有与其关联的集合的实体时,我收到以下消息。

“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”

我通过参数接收具有新属性的实体。Eventos 有一个 Clientes 集合,它是 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”的新数据,但是当我尝试更新与 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();
4

2 回答 2

0

您已经使用以下代码加载了实体:

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

您将需要更新已加载到对象上下文中的实体。

更新objEvento然后应用并保存。

于 2012-06-27T19:52:47.950 回答
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; 

} 
于 2012-06-27T19:55:45.727 回答