Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在保存前检查工作项是否已修改_C#_.net_Tfs_Workitem - Fatal编程技术网

C# 如何在保存前检查工作项是否已修改

C# 如何在保存前检查工作项是否已修改,c#,.net,tfs,workitem,C#,.net,Tfs,Workitem,我在保存工作项时遇到问题。这个场景是我有一个web应用程序,从那里我向TFS发送值。我可以在这两个地方更改值(通过web应用程序也可以从TFS更改)。我现在面临的问题是 当我尝试在TFS中保存一个工作项时,它会检查您打开它后是否做了任何更改。如果是这样,则不允许保存。当我从web应用程序保存时没有这样的检查,我使用了workitem.isvalid方法,但在我从web应用程序保存之前,它仍然没有检查修改过的workitem 这是我的密码 wi.Open(); foreach (var str

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

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

这是我的密码

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();
}
有谁能帮我避免并发问题吗。我需要保存工作项,除非之前没有做任何更改,否则我会将错误消息显示给最终用户。

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

作为旁注,显示为错误消息的字段仅是不符合工作项类型定义规则的字段(即,字段的值超出其定义的
允许值
)。应该对此进行检查,但如果检查自上次保存以来是否发生了更改,则应显示不同的错误

以下是
工作项
类的MSDN链接:

编辑

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

workItem.Save(SaveFlags.MergeAll);

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

您好,谢谢您的回复。我还使用了IsDirty,它仅在保存后检查更改的值。我的问题是,我同时在两个不同的地方打开了相同的工作项(一个在web应用程序中,另一个在TFS中),当我首先在web中保存工作项并将其保存在TFS中时,它给出了错误(检查是脏的),但如果我先保存TFS并尝试从web应用程序保存工作项,它不会给出任何异常,更改后的值将消失。在保存之前,我需要显示一些错误(某个是从外部环境修改的或未修改的)更新答案以提供异常。您好,我无法在saveflags中看到MergeAll我只能在saveflags中看到两个枚举值一个是none,另一个是mergelinks,我没有看到任何其他值,我曾使用Microsoft.TeamFoundation.WorkItemTracking.Client引用过;您使用的是tfs 2010还是2012?