Entity framework 为什么不是';";DbContext.SaveChanges()”;投掷;DbUpdateConcurrencyException“;
我正在使用Entity framework 为什么不是';";DbContext.SaveChanges()”;投掷;DbUpdateConcurrencyException“;,entity-framework,Entity Framework,我正在使用DbContext尝试POCO,但不知道如何触发乐观并发异常。当我在并发失败时调用DbContext.SaveChanges()时,它返回零,而不是抛出DbUpdateConcurrencyException或OptimisticConcurrencyException 不清楚应该抛出哪一个(可能是前者),但我已经详细阅读了这篇文章 以及许多文章,但找不到任何解决这种情况的方法。我是否需要显式地执行某些操作来生成异常 请注意,我的POCO类和DBContext派生类是由“EF 4
DbContext
尝试POCO,但不知道如何触发乐观并发异常。当我在并发失败时调用DbContext.SaveChanges()
时,它返回零,而不是抛出DbUpdateConcurrencyException
或OptimisticConcurrencyException
不清楚应该抛出哪一个(可能是前者),但我已经详细阅读了这篇文章
请注意,我的POCO类和
DBContext
派生类是由“EF 4.x DBContext生成器”自动生成的,并且正在更新的字段将其“并发模式”设置为“固定”(尽管我认为这在POCO环境中没有任何影响)。如果在不同的线程中创建两个上下文实例,或者在另一个内部,则可以获得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
}
好的,谢谢。然而,在我自己的实验中,如果我检索并更新一个字段,在“SaveChanges”处中断,然后在我的应用程序之外更新同一字段(使用其他方法),然后允许“SaveChanges()”继续,它不会引发任何异常。它只返回零(没有“DbUpdateConcurrencyException”)。但是,如果我使用“ObjectContext”运行相同的实验(而不是“DbCOntext”-无POCO IOW),它会按预期工作(“抛出OptimisticConcurrencyException”)。有什么想法吗?我刚刚测试了您自己的场景,出现了与我预期相同的问题。第一次调用“SaveChanges()”有效,第二次调用返回零(无例外)。这只是一个更新,我发现了“ConcurrencyCheckAttribute”(未广泛宣传),但它似乎没有像宣传的那样工作。一旦我搞清楚了,我会发回的。有趣。以后我得测试一下自己