2012-06-27 3 views
1

Я получаю следующее сообщение, когда пытаюсь обновить объект, у которого есть связанная с ним коллекция.Ошибка обновления коллекции с помощью 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(); 

ответ

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», но я получаю следующее сообщение об ошибке при попытке обновить список «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(); –

+0

Здесь проблема в том, что у вас есть коллекция, и вы пытаетесь ее заменить, вместо добавления или обновления элемента в коллекции. –

+0

Как вы обновляете коллекцию? Мне нужно обновить коллекцию «Клиенты», которая принадлежит определенному «Eventos», –

Смежные вопросы