private void SaveTraces(IEAElement element) { //first need to identify those tracelinks that were removed and those that were added // currently traces do not support update and can only be added or removed IEAElement[] existingTraces = element.GetTracedElements().ToArray(); // existing.except(traces) traces that have been deleted IEnumerable <string> removedTraces = existingTraces.Select(e => e.GUID).Except(Traces.Select(t => t.TracedElementGUID)); // traces.except(existing) traces that were added IEnumerable <string> addedTraces = Traces.Select(t => t.TracedElementGUID).Except(existingTraces.Select(e => e.GUID)); //in order to remove tracelink i need to find the correct connection that connect this and the linked element. foreach (string removedTrace in removedTraces) { IEAConnector connector = element.GetConnectors().FirstOrDefault(c => (c.GetSupplier().GUID.Equals(removedTrace) || c.GetClient().GUID.Equals(removedTrace)) && c.Stereotype.Equals(EAConstants.RelationTrace) && c.Type.Equals(EAConstants.AbstractionMetaType)); if (null != connector) { element.RemoveConnector(connector); } } foreach (string addedTrace in addedTraces) { IEAElement suppliedElement = EAMain.Repository.GetElementByGUID(addedTrace); element.ConnectTo(suppliedElement, EAConstants.AbstractionMetaType, EAConstants.RelationTrace); } }