private PropertyContextFacade ChangeCollection(PropertyContext context, Func <NakedObject, NakedObject, Consent> validator, Action <NakedObject, NakedObject> mutator, ArgumentContextFacade args)
        {
            ValidateConcurrency(context.Target, args.Digest);

            var property = (OneToManyAssociation)context.Property;

            if (ConsentHandler(IsOfCorrectType(property, context), context, Cause.Other))
            {
                if (ConsentHandler(IsCurrentlyImmutable(context.Target), context, Cause.Immutable))
                {
                    if (ConsentHandler(property.isAvailable(context.Target), context, Cause.Disabled))
                    {
                        if (ConsentHandler(validator(context.Target, (NakedObject)context.ProposedNakedObject), context, Cause.Other))
                        {
                            if (!args.ValidateOnly)
                            {
                                mutator(context.Target, (NakedObject)context.ProposedNakedObject);
                            }
                        }
                    }
                }
            }

            context.Mutated = true;
            return(context.ToPropertyContextFacade(this));
        }