我有两个相关的表:dbo.resources
和dbo.reservation
; dbo.resources
有一个指向选项的外dbo.reservation
键ON DELETE SET NULL
。我还有一个“之后”触发器dbo.resources
,当资源被删除时,它会删除保留。
OptimisticConcurrencyException
当我尝试手动删除预订和资源时,我已经“设法”提出了一个问题,这看起来很正常。
然后我找到了问题并消除了它,但现在我想通过捕获OptimisticConcurrencyException
并刷新上下文来强制执行更强大的异常处理机制。
我的问题是:谁能向我解释为什么这段代码:
catch (System.Data.OptimisticConcurrencyException ocException)
{
foreach (var objectStateEntry in ocException.StateEntries)
_Context.Refresh(System.Data.Objects.RefreshMode.ClientWins, objectStateEntry.Entity);
_Context.SaveChanges();
}
不工作,
而这个:
catch (System.Data.OptimisticConcurrencyException ocException)
{
foreach (var objectStateEntry in ocException.StateEntries)
_Context.Refresh(System.Data.Objects.RefreshMode.StoreWins, objectStateEntry.Entity);
_Context.SaveChanges();
}
做?EF 如何处理每种情况下的对象上下文(StoreWins 和 ClientWins)?“幕后”究竟发生了什么?