并发问题处理与可测试应用构建
1. 并发异常处理
1.1 刷新实体解决异常
当保存更改时,可能会遇到并发异常。例如,图的父实体(如地址实体)可能会被刷新,但联系人实体每次保存更改时仍会引发异常。可以通过异常返回的 ObjectStateEntry 对象来解决这个问题。示例代码如下:
catch (OptimisticConcurrencyException ex)
{
var contact = ex.StateEntries[0].Entity;
context.Refresh(RefreshMode.ClientWins, contact);
context.SaveAllChanges();
}
1.2 多次重试保存更改
SaveChanges 方法在遇到异常时会回滚已完成的操作并停止。可以在异常处理程序中再次调用 SaveChanges ,但如果再次失败,需要再次捕获异常。可以使用递归调用 SaveChanges 方法来处理多次异常,示例代码如下:
try
{
context.SaveChanges();
}
catch (OptimisticConcurrencyException ex)
{
//do some work, then try again
try
{
context.SaveChanges();
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



