1

我在保存工作项时遇到问题。场景是我有一个 Web 应用程序,从那里我向 TFS 发送值。我可以在这两个地方更改值(也可以通过 TFS 的 Web 应用程序)。我现在面临的问题是

当我尝试在 TFS 中保存工作项时,它会检查自您打开它以来是否进行了任何更改。如果是这样,则不允许您保存。当我从 Web 应用程序保存时没有这样的检查,我使用了 workitem.isvalid 方法,在我从 Web 应用程序保存之前它仍然没有检查修改的工作项。

这是我的代码

wi.Open();

foreach (var str in piWorkItemTfs.Values.Keys)
    wi[str] = piWorkItemTfs.Values[str];


if (!wi.IsValid())
{
    var listFelaktigaVärde = (from Field field in wi.Validate() select field.Name + "=" + field.Value).ToList();

    errorMessage = "Felaktiga värde: Id " + wi.Id + " " + String.Join(", ", listFelaktigaVärde);
}
else
{
    wi.Save();
    errorMessage = wi.Id.ToString();
}

请任何人帮助我避免并发问题。我只需要保存工作项,之前没有进行任何更改,否则我已向最终用户显示错误消息。

4

1 回答 1

2

工作项上的IsValid()方法只验证工作项上的字段是否正确,它不检查工作项是否在其他地方发生了变化。调用的工作项对象上有一个标志,IsDirty用于检查工作项自上次保存后是否已更改。

附带说明一下,您显示为错误消息的字段只是不符合工作项类型定义规则的字段(即超出其定义的字段的值AllowedValues)。这应该被检查,但检查自上次保存后它是否已更改应该显示不同的错误。

WorkItem这是该课程的 MSDN 链接:http: //msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem (v=vs.110).aspx

编辑

IsDirty标志将确定工作项是否已在本地修改。相反,检查服务器端保存的方法是在保存工作项的同时尝试合并。

workItem.Save(SaveFlags.MergeAll);

IsValid标志用于本地更改,而不是服务器更改。使用该选项保存工作项SaveFlags.MergAll将进行检查,如果工作项已保存在服务器端,则抛出异常。

于 2013-02-27T18:14:57.527 回答