parallel.foreach和insertonsubmit primarykey问题

时间:2013-05-06 20:49:40

标签: c#

我正在尝试实现a parallel.foreach内部InsertOnSubmit

大部分时间一切正常,但我经常会遇到异常:

  

违反PRIMARY KEY约束 - 无法插入重复键

我用不同的parallelOptions尝试过它并且它不一致。我没有为循环的每次迭代使用相同的DataContext,是否有任何关于在InsertOnSubmit循环中使用parallel.foreach的建议?

while (myConcurrentDictionary.Count > 0)
{
    Parallel.ForEach(myConcurrentDictionary, pOptions, (KVP, loopState) =>
    {
        pOptions.CancellationToken.ThrowIfCancellationRequested();

        passCount++;
        MsgLog.WriteLine(KVP.Key);
        processKVP(KVP.Key, KVP.Value, loopState);
    }); //End of Parallel.ForEach loop
}


processKVP()
{
    ...
    DCtxt myDC = new DCtxt();

    myDC.TABLE.InsertOnSubmit(new TABLE
    {
       ...
    });
    insertCount++;

    if ((insertCount % 100) == 0)
    {
      myDC.SubmitChanges();
    }
}

1 个答案:

答案 0 :(得分:0)

我发现了这个错误。应用程序正在调用Web服务,该服务创建带有时间戳的文件,这是导致此问题的原因。因为我并行调用Web服务,所以我有多个同时创建的文件。

因此,通过创建一个增加到十万分之一的时间戳,这个问题得到了纠正:

DateTime.Now.ToString("yyyy_MM_dd_HHmmssfffff")

感谢大家对此的评论。