2013-07-09 2 views
1

Я получаю ошибкуошибок несколько объектов с одинаковым ключом DbContext

«Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одинаковым ключа.»

Я использовал этот метод в двух местах. На первом месте - работайте правильно, но во втором я ошибаюсь.

Как решить эту проблему?

Мой метод:

public static void UpdateMehod(ModelEntities context, ProcessedFilest processedFiles) 
{ 
    context.Set<ProcessedFiles>().Attach(processedFiles); 
    context.Entry(processedFiles).Property(p => p.ID).IsModified = true; 
    context.SaveChanges(); 
} 

создать новый метод:

государственной статической силы UpdateProtocol (ModelEntities контекст, ProcessedFilesXml processedFilesXml) { запись уаг = context.Entry (processedFilesXml);

 if (entry.State == EntityState.Detached) 
     { 
      var set = context.Set<ProcessedFilesXml>(); 
      ProcessedFilesXml attachedEntity = set.Find(processedFilesXml.ProcessedFileXmlID); 

      if (attachedEntity != null) 
      { 
       var attachedEntry = context.Entry(attachedEntity); 
       attachedEntry.CurrentValues.SetValues(processedFilesXml); 
      } 
      else 
      { 
       entry.State = EntityState.Modified; 
      } 
     } 

     //context.Set<ProcessedFilesXml>().Attach(processedFilesXml); 
     //context.Entry(processedFilesXml).Property(p => p.Protocol).IsModified = true; 
     //context.SaveChanges(); 
    } 

Но я не знаю, ho create savechanges?

ответ

1

При загрузке объекта из контекста вы не можете прикрепить объект с тем же ключом agai.See это question или this

public override void Update(T entity) where T : IEntity { 
    if (entity == null) { 
     throw new ArgumentException("Cannot add a null entity."); 
    } 

    var entry = _context.Entry<T>(entity); 

    if (entry.State == EntityState.Detached) { 
     var set = _context.Set<T>(); 
     T attachedEntity = set.Find(entity.Id); // You need to have access to key 

     if (attachedEntity != null) { 
      var attachedEntry = _context.Entry(attachedEntity); 
      attachedEntry.CurrentValues.SetValues(entity); 
     } else { 
      entry.State = EntityState.Modified; // This should attach entity 
     } 
    } 
enter code here 

}

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