2016-05-07 2 views
0

У меня есть глобальный контекст, определенный в моем классеже ключ уже добавил

private readonly MyDatabase _context; 

Существует метод в классе, который я бегу параллельно, который обращается к таблице в моем контексте. Это вызов на столе.

var tableAsList = _context.MyTable.ToList(); 

Это работало для меня ранее. Теперь я получаю следующую ошибку.

An exception of type 'System.ArgumentException' occurred in EntityFramework.dll but was not handled in user code 

Additional information: An item with the same key has already been added. 

Я видел другие говорят вопрос исходит от имен свойств, являющихся аналогичной (разница в случае), но мои имена свойств все кардинально отличается. вот мой класс.

public class MyTable 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public bool IsSub { get; set; } 
} 

Любые идеи о том, как я могу исправить эту ошибку, будем очень благодарны.

ответ

1

Контекст не является потокобезопасным. Вы не можете запускать несколько операций в параллельных потоках. Ошибки, которые вы видите, могут быть выполнены из совершенно разных операций. Вам нужен lock или какой-либо другой механизм, чтобы гарантировать, что несколько потоков не пытаются выполнять параллельные операции в одном контексте.

Еще одна причина подозревать это - вы упомянули, что работала ранее. Вот почему многие проблемы с многопотоковой обработкой очень интересны - они непредсказуемы, и код может работать. Это может даже работать большую часть времени. Тогда это не так. Кто-то сообщает об ошибке, но никто не может воспроизвести ее.

+0

спасибо. Конечно, это была проблема. – tralmix

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