2016-05-07 10 views
0

ich einen globalen Kontext in meiner Klassegleichen Schlüssel bereits hinzugefügt

private readonly MyDatabase _context; 

Es gibt eine Methode in der Klasse definiert haben, die ich parallel laufen, die eine Tabelle auf meinem Kontext zugreift. Dies ist der Anruf auf dem Tisch.

var tableAsList = _context.MyTable.ToList(); 

Dies war für mich zuvor funktioniert. Jetzt erhalte ich den folgenden Fehler.

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. 

Ich habe gesehen, andere das Problem sagen, kommt aus den Eigenschaftsnamen sind ähnlich (Unterschied für den Fall), aber meine Eigenschaftsnamen sind drastisch anders. Hier ist meine Klasse.

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

    public string Name { get; set; } 

    public bool IsSub { get; set; } 
} 

Irgendwelche Ideen, wie ich diesen Fehler beheben kann, würde sehr geschätzt werden.

Antwort

1

Der Kontext ist nicht threadsicher. Sie können mehrere Vorgänge für gleichzeitige Threads nicht ausführen. Die Fehler, die Sie sehen, können von völlig verschiedenen Operationen stammen. Sie benötigen einen lock oder einen anderen Mechanismus, um sicherzustellen, dass mehrere Threads nicht versuchen, gleichzeitige Vorgänge im selben Kontext auszuführen.

Ein weiterer Grund, dies zu vermuten - Sie erwähnen, dass es vorher funktioniert hat. Das ist es, was Multithreading-Probleme so viel Spaß macht - sie sind unberechenbar und der Code scheint zu funktionieren. Es könnte sogar die meiste Zeit funktionieren. Dann plötzlich nicht. Jemand meldet einen Fehler, aber niemand kann ihn reproduzieren.

+0

Vielen Dank. Sicher genug, das war das Problem. – tralmix

Verwandte Themen