internal RTLinkChangeGroup AddLinkChangeGroup(LinkChangeGroup group) { using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance()) { var rtLinkChangeGroup = RTLinkChangeGroup.CreateRTLinkChangeGroup( 0, (int)group.Status, false, SessionGroupId, SessionId, SourceId); rtLinkChangeGroup.GroupName = group.GroupName; context.AddToRTLinkChangeGroupSet(rtLinkChangeGroup); int newActiveActionCount = 0; foreach (LinkChangeAction a in group.Actions) { RTLinkChangeAction rtLinkChangeAction = AddChangeAction(a, context); if (rtLinkChangeAction == null) { continue; } rtLinkChangeAction.LinkChangeGroup = rtLinkChangeGroup; ++newActiveActionCount; } if (newActiveActionCount <= 0) { return(null); } context.TrySaveChanges(); group.InternalId = rtLinkChangeGroup.Id; context.Detach(rtLinkChangeGroup); return(rtLinkChangeGroup); } }
internal void SaveChangeGroupActionStatus(LinkChangeGroup linkGroup) { using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance()) { var groupQuery = from g in context.RTLinkChangeGroupSet where g.Id == linkGroup.InternalId select g; Debug.Assert(groupQuery.First() != null); RTLinkChangeGroup rtLinkChangeGroup = groupQuery.First(); rtLinkChangeGroup.Status = (int)linkGroup.Status; rtLinkChangeGroup.ContainsConflictedAction = linkGroup.IsConflicted; foreach (LinkChangeAction linkAction in linkGroup.Actions) { if (linkAction.InternalId == LinkChangeAction.INVALID_INTERNAL_ID) { throw new InvalidOperationException("Error updating link change action: action is not persisted in DB."); } RTLinkChangeAction rtLinkChangeAction = context.RTLinkChangeActionSet.Where (lcg => lcg.Id == linkAction.InternalId).First(); rtLinkChangeAction.Status = (int)linkAction.Status; rtLinkChangeAction.Conflicted = linkAction.IsConflicted; rtLinkChangeAction.ServerLinkChangeId = linkAction.ServerLinkChangeId; } context.TrySaveChanges(); } }
private RTLinkChangeAction AddChangeAction(LinkChangeAction action, RuntimeEntityModel context) { if (action.InternalId == LinkChangeAction.INVALID_INTERNAL_ID) { RTArtifactLink rtArtifactLink = FindCreateLink(action.Link, context); Debug.Assert(null != rtArtifactLink, "rtArtifactLink is null."); int status = LinkChangeAction.GetStatusStorageValue(action.Status); var duplicateActionInDeferralQuery = from a in context.RTLinkChangeActionSet where a.ActionId.Equals(action.ChangeActionId) && a.SessionGroupUniqueId.Equals(SessionGroupId) && a.SessionUniqueId.Equals(SessionId) && a.SourceId.Equals(SourceId) && a.ArtifactLink.Id == rtArtifactLink.Id && a.Status == status select a.Id; if (duplicateActionInDeferralQuery.Count() > 0) { // duplicate link change action in deferral status return(null); } var rtLinkChangeAction = RTLinkChangeAction.CreateRTLinkChangeAction( 0, SessionGroupId, SessionId, action.ChangeActionId, status, false, SourceId); rtLinkChangeAction.ArtifactLink = rtArtifactLink; return(rtLinkChangeAction); } throw new MigrationException(MigrationToolkitResources.ErrorSaveDuplicateLinkAction, action.InternalId); }
private void UpdateLinkChangeActionStatus( long internalId, LinkChangeAction.LinkChangeActionStatus linkChangeActionStatus, RuntimeEntityModel context) { Debug.Assert(internalId != LinkChangeAction.INVALID_INTERNAL_ID); var linkChangeActionQuery = from a in context.RTLinkChangeActionSet where a.Id == internalId select a; Debug.Assert(linkChangeActionQuery.Count() == 1); RTLinkChangeAction rtLinkChangeAction = linkChangeActionQuery.First(); rtLinkChangeAction.Status = (int)linkChangeActionStatus; }
private RTLinkChangeAction AddChangeAction(LinkChangeAction action, RuntimeEntityModel context) { if (LinkChangeActionMatchesExistingServerLinkChangeId(action, context)) { TraceManager.TraceInformation(String.Format("LinkChangeGroupManager: Skipping generated link change ({0} link to work item {1}) because it was made by the sync process", action.ChangeActionId == WellKnownChangeActionId.Add ? "Add" : "Delete", action.Link.SourceArtifactId)); return(null); } if (action.InternalId == LinkChangeAction.INVALID_INTERNAL_ID) { RTArtifactLink rtArtifactLink = FindCreateLink(action.Link, context); Debug.Assert(null != rtArtifactLink, "rtArtifactLink is null."); int status = LinkChangeAction.GetStatusStorageValue(action.Status); var duplicateActionInDeferralQuery = from a in context.RTLinkChangeActionSet where a.ActionId.Equals(action.ChangeActionId) && a.SessionGroupUniqueId.Equals(SessionGroupId) && a.SessionUniqueId.Equals(SessionId) && a.SourceId.Equals(SourceId) && a.ArtifactLink.Id == rtArtifactLink.Id && a.Status == status select a.Id; if (duplicateActionInDeferralQuery.Count() > 0) { // duplicate link change action in deferral status return(null); } var rtLinkChangeAction = RTLinkChangeAction.CreateRTLinkChangeAction( 0, SessionGroupId, SessionId, action.ChangeActionId, status, false, SourceId); rtLinkChangeAction.ArtifactLink = rtArtifactLink; if (!string.IsNullOrEmpty(action.ServerLinkChangeId)) { rtLinkChangeAction.ServerLinkChangeId = action.ServerLinkChangeId; } return(rtLinkChangeAction); } throw new MigrationException(MigrationToolkitResources.ErrorSaveDuplicateLinkAction, action.InternalId); }
private LinkChangeAction RealizeLinkChangeActionFromEDM(LinkChangeGroup linkChangeGroup, RTLinkChangeAction rtLinkChangeAction) { rtLinkChangeAction.ArtifactLinkReference.Load(); ILink artifactLink = RealizeArtifactLinkFromEDM(rtLinkChangeAction.ArtifactLink); var linkChangeAction = new LinkChangeAction(rtLinkChangeAction.ActionId, artifactLink, (LinkChangeAction.LinkChangeActionStatus)rtLinkChangeAction.Status, rtLinkChangeAction.Conflicted, rtLinkChangeAction.ExecutionOrder ?? 0, linkChangeGroup, rtLinkChangeAction.Id); linkChangeAction.ServerLinkChangeId = rtLinkChangeAction.ServerLinkChangeId; return(linkChangeAction); }