internal void LinkToTask(Guid linkedTaskId, int storypoints)
        {
            var linkedTasks = new Dictionary <Guid, int>(this.LinkedTasks);

            linkedTasks.Add(linkedTaskId, storypoints);
            var newActivityValue = 0;

            switch (this.ActivityType)
            {
            case ActivityType.Percentage:
                newActivityValue = this.RecalculatePercentageActivityValue(linkedTasks, this.CompletedLinkedTasks);
                break;

            case ActivityType.Leveling:
                newActivityValue = this.RecalculateLevelingActivityValue(linkedTasks, this.CompletedLinkedTasks);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var taskLinkedToActivityEvent =
                new TaskLinkedToActivityEvent(this.AggregateId, linkedTaskId, storypoints, newActivityValue);

            this.RaiseEvent(taskLinkedToActivityEvent);
        }
 private void Apply(TaskLinkedToActivityEvent obj)
 {
     this.LinkedTasks.Add(obj.TaskId, obj.Storypoints);
     this.ActivityValue = obj.NewActivityValue;
 }