2

私が行った場合:

RelatedLink newLink = new RelatedLink(linkTypeEnd, id);
if (workItem.Links.Contains(newLink)) return;
workItem.Links.Add(newLink);

Add メソッドで ValidationException が発生し、リンクが既にコレクションにあることを示してクラッシュします。

TF237099: 作業項目のリンクが重複しています。

では、Contains は実際に何をチェックしているのでしょうか。参照等価?きっとそうじゃない?

これを処理する方法に関するヒントはありますか?要件をよく知られたツールから TFS に移行するためのツールを作成しています。

4

2 に答える 2

3

したがって、特定のWorkItemがあり(ID = 1000と仮定します)、それに関連するWorkItemを追加します(ID = 1001と仮定します)。
単に行く

workItem.Links.Add(newLink);

WI1001がすでにWI1000のリンクである場合に提供した例外がスローされるため、機能しません。

したがって、追加する前に、WI1001がすでに1000のリンクにあるかどうかを確認する必要があります。これは次のように可能でした:

WorkItem workItem = workItemStore.GetWorkItem(1000);  

LinkCollection links = workItem.Links;
List<int> relatedWorkItemIds = new List<int>();
foreach (var link in links)
{
   relatedWorkItemIds.Add(((Microsoft.TeamFoundation.WorkItemTracking.Client.RelatedLink) (link)).RelatedWorkItemId);
}

if(relatedWorkItemIds.Contains(1001))
{
   return;
}
else
{
   WorkItemLinkTypeEnd linkTypeEnd = workItemStore.WorkItemLinkTypes.LinkTypeEnds["Child"]; 
   RelatedLink newLink = new RelatedLink(linkTypeEnd, 1001);
   workItem.Links.Add(newLink);
}

答えに向けて取り組んでいる私は、あなたが直接「WorkItem.Links.Contains()に何をするのか」と尋ねることに気づきました。->答えがありません
私が上で実装したものをどうにかして利用できることを願っています。

于 2011-10-24T14:16:08.207 に答える