2016-05-07 5 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

関連する問題