已添加相同的密钥

时间:2016-05-07 03:08:45

标签: c# entity-framework parallel-processing

我在班级中定义了一个全局上下文

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 个答案:

答案 0 :(得分:1)

上下文不是线程安全的。您无法在并发线程上运行多个操作。您所看到的错误可能来自完全不同的操作。您需要lock或其他一些机制来确保多个线程不会尝试在同一个上下文中执行并发操作。

怀疑这一点的另一个原因 - 你提到它以前是有效的。这就是使多线程问题变得如此有趣的原因 - 它们是不可预测的,并且代码似乎可行。它甚至可能在大多数时间都有效。然后它突然间没有了。有人报告了一个错误,但没有人可以重现它。