private void Handle(FlowNodeInstanceAddedEvent evt)
        {
            var instance = new FlowNodeInstance {
                FlowNodeId = evt.FlowNodeId, EltId = evt.FlowNodeInstanceId
            };

            ElementInstances.Add(instance);
            Version        = evt.Version;
            UpdateDateTime = evt.CreateDateTime;
        }
        private bool TryAddInstance(string elementId, string pathId, out string instanceId)
        {
            var path    = GetExecutionPath(pathId);
            var pointer = path.Pointers.FirstOrDefault(_ => _.FlowNodeId == elementId);

            if (pointer != null)
            {
                var instance = GetActiveInstance(pointer.InstanceFlowNodeId);
                if (instance != null)
                {
                    instanceId = instance.EltId;
                    return(false);
                }
            }

            instanceId = Guid.NewGuid().ToString();
            var evt = new FlowNodeInstanceAddedEvent(Guid.NewGuid().ToString(), AggregateId, Version + 1, instanceId, elementId, DateTime.UtcNow);

            Handle(evt);
            DomainEvents.Add(evt);
            return(true);
        }