private void Initialize(SaveMechanicInputDto mechanic, EntityDependency[] dependencies)
        {
            RegisterCommandRepositoryFactory <Mechanic>(() => new MechanicCommandRepository());

            RootEntity = new Mechanic
            {
                Id   = mechanic.MechanicId,
                Name = mechanic.Name
            };

            Enqueue(new SaveEntityCommandOperation <Mechanic>(RootEntity, dependencies));

            Enqueue(new DeleteLinksCommandOperation <Mechanic>(RootEntity, "UnlinkVehicleFromMechanic"));

            if (mechanic.Vehicle != null)
            {
                ILinkedAggregateCommandOperation operation;

                var vehicle = mechanic.Vehicle;

                if (vehicle is CarInputDto)
                {
                    operation = new AddLinkedAggregateCommandOperation <Mechanic, SaveCarCommandAggregate, CarInputDto>(
                        RootEntity,
                        (CarInputDto)vehicle,
                        new EntityDependency[]
                    {
                        new EntityDependency
                        {
                            Entity   = RootEntity,
                            Selector = "Vehicle"
                        }
                    }
                        );

                    Enqueue(operation);
                }
                else if (vehicle is TruckInputDto)
                {
                    operation = new AddLinkedAggregateCommandOperation <Mechanic, SaveTruckCommandAggregate, TruckInputDto>(
                        RootEntity,
                        (TruckInputDto)vehicle,
                        new EntityDependency[]
                    {
                        new EntityDependency
                        {
                            Entity   = RootEntity,
                            Selector = "Vehicle"
                        }
                    }
                        );

                    Enqueue(operation);
                }
                else if (vehicle is VehicleInputDto)
                {
                    operation = new AddLinkedAggregateCommandOperation <Mechanic, SaveVehicleCommandAggregate, VehicleInputDto>(
                        RootEntity,
                        (VehicleInputDto)vehicle,
                        new EntityDependency[]
                    {
                        new EntityDependency
                        {
                            Entity   = RootEntity,
                            Selector = "Vehicle"
                        }
                    }
                        );

                    Enqueue(operation);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
        }
 public SaveMechanicCommandAggregate(SaveMechanicInputDto mechanic, EntityDependency[] dependencies = null) : base(new DomainFramework.DataAccess.RepositoryContext(MechanicServicesSingleVehicleConnectionClass.GetConnectionName()))
 {
     Initialize(mechanic, dependencies);
 }