Я получаю следующее сообщение, когда пытаюсь обновить объект, у которого есть связанная с ним коллекция.Ошибка обновления коллекции с помощью Entity Framework
«Объект с тем же ключом уже существует в 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;
}
}
Проблема заключается в "пристроить".
В чем проблема?
* EDIT **
Он работал частично, это спасло новые данные для «Eventos», но я получаю следующее сообщение об ошибке при попытке обновить список «Clientes» asociated в Eventos.
«Свойство« Клиенты »по типу« Eventos _... »не может быть установлено, поскольку коллекция уже установлена в 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();
Он работал частично, это спасло новые данные для «Eventos», но я получаю следующее сообщение об ошибке при попытке обновить список «Clientes» asociated в Eventos. «Свойство« Клиенты »по типу« Eventos _... »не может быть установлено, поскольку коллекция уже установлена в 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(); –
Здесь проблема в том, что у вас есть коллекция, и вы пытаетесь ее заменить, вместо добавления или обновления элемента в коллекции. –
Как вы обновляете коллекцию? Мне нужно обновить коллекцию «Клиенты», которая принадлежит определенному «Eventos», –