问题描述
|
在我所指的RIA服务的多元化视频中,他们有一个更新代码,如下所示:
public void UpdateProspect(Prospect currentProspect)
{
currentProspect.LastUpdate = DateTime.Now;
ObjectContext.Prospects.AttachAsModified(currentProspect,ChangeSet.GetOriginal(currentProspect));
}
我的第一个问题是此更新将如何引起问题?为了显示问题,他启动了2个silverlight客户,然后从第一个客户更新了该项目,并且很好地进行了补货。然后,他去第二个客户端进行更新,并引发错误。为什么RIA会引发错误?第一次更新有什么关系?我认为这确实是错误的,我们需要再次编写一些特殊的代码来解决EntityConflict,然后再次将批处理提交到服务器。这样合适吗
哦,我忘了他将ConcurrencyMode设置为Fixed。我的第二个问题是何时将ConcurrencyMode设置为Fixed?默认情况下,该模式设置为“无”。
提前致谢:)
解决方法
这是由于过时读取导致的竞争状况。考虑以下:
两个客户获得ѭ1的副本-称为版本1
A修改了
LastUpdate
属性,该对象现在是版本2
A保存Prospect
B修改LastUpdate
属性。对于客户端B,该版本现在为版本2,但是客户端B \的版本2与客户端A的版本不同
B保存Prospect
-这将覆盖客户端A的更改!
这里的问题是B无法知道A进行了任何更改。抛出该异常是为了防止竞争条件意外删除数据。
解决方案是捕获此异常并报告您在编辑ѭ1时已对其进行了更改,然后重新加载它。
您可以在此处找到有关使用ѭ7的更多信息。