当我尝试更新一个与其相关联的集合的实体时,我收到以下消息。
“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();
答案 0 :(得分:0)
您已使用以下代码加载实体:
Eventos objEvento =
DB.Eventos.Where(x => x.Id_evento == eventos.Id_evento)
.SingleOrDefault();
您将需要更新已加载到对象上下文中的实体。
更新objEvento
,然后应用并保存。
答案 1 :(得分: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;
}