为什么不“DbContext.SaveChanges()”抛出“DbUpdateConcurrencyException”

时间:2012-07-25 14:41:20

标签: entity-framework

我正在使用DbContext试验POCO,并且不了解如何触发乐观并发异常。当我在它应该失败并发时调用DbContext.SaveChanges()时,它返回零而不是抛出DbUpdateConcurrencyExceptionOptimisticConcurrencyException

目前还不清楚哪些应该抛出(大概是前者),但我已经详细阅读了这篇文章

以及许多文章,无法找到解决这种情况的任何内容。我需要明确做些什么才能生成异常吗?

请注意,我的POCO类和DBContext衍生物是由“EF 4.x DBContext Generator”自动生成的,正在更新的字段将其“并发模式”设置为“固定”(尽管我不是认为这对POCO环境有任何影响。)

1 个答案:

答案 0 :(得分:3)

如果在不同的线程中或在另一个内部创建上下文的两个实例,则可以获得DbUpdateConcurrencyException。即。

using (var db = new myContext())
{
    db.PocoClass.Add(someNewOrUpdatedObj);

    using (var db2 = new myContext())
    {
        db2.PocoClass.Add(someNewOrUpdatedObj);
        db2.SaveChanges();
    }

    db.SaveChanges(); //DbUpdateConcurrencyException thrown here
}