Ошибка нескольких объектов с одним и тем же ключом 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();
}

Создаю новый метод:

общедоступный статический void UpdateProtocol (контекст ModelEntities, ProcessedFilesXml processingFilesXml) {var entry = context.Entry (loadedFilesXml);

        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();
    }

Но я не знаю, как создавать изменения?


person zrabzdn    schedule 09.07.2013    source источник


Ответы (1)


Если вы загружаете объект из контекста, вы не можете присоединить объект с тем же ключом agai. См. Это вопрос или это

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

}

person Community    schedule 09.07.2013