示例#1
0
        /// <summary>
        /// Validate the changeset.
        /// </summary>
        /// <param name="validationContext">The ValidationContext to use.</param>
        /// <returns>True if the changeset is valid, false otherwise.</returns>
        internal bool Validate(ValidationContext validationContext)
        {
            bool success = true;

            foreach (Entity entity in this)
            {
                entity.VerifyNotEditing();
                bool         entityRequiresValidation = entity.MetaType.RequiresValidation;
                EntityAction customMethod             = entity.EntityActions.SingleOrDefault();

                if (!entityRequiresValidation && customMethod == null)
                {
                    continue;
                }

                if (entity.EntityState == EntityState.Deleted)
                {
                    // skip validation for Deleted entities here since the entity is going to be deleted anyway
                    continue;
                }

                // first validate the entity
                List <ValidationResult> validationResults = new List <ValidationResult>();
                if (entityRequiresValidation)
                {
                    ValidationUtilities.TryValidateObject(entity, validationContext, validationResults);
                }

                // validate any Custom Method invocations
                if (customMethod != null)
                {
                    // validate the method call
                    object[]          parameters = customMethod.HasParameters ? customMethod.Parameters.ToArray() : null;
                    ValidationContext customMethodValidationContext = ValidationUtilities.CreateValidationContext(entity, validationContext);
                    ValidationUtilities.TryValidateCustomUpdateMethodCall(customMethod.Name, customMethodValidationContext, parameters, validationResults);
                }

                if (validationResults.Count > 0)
                {
                    // replace the validation errors for the entity
                    IEnumerable <ValidationResult> entityErrors = new ReadOnlyCollection <ValidationResult>(validationResults.Select(err => new ValidationResult(err.ErrorMessage, err.MemberNames)).Distinct(new ValidationResultEqualityComparer()).ToList());
                    ValidationUtilities.ApplyValidationErrors(entity, entityErrors);
                    success = false;
                }
                else
                {
                    // clear the errors for the entity
                    entity.ValidationErrors.Clear();
                }
            }

            return(success);
        }
示例#2
0
        /// <summary>
        /// Get the <see cref="ValidationContext"/> to be used for validation invoked
        /// from this <see cref="ComplexObject"/>.
        /// </summary>
        /// <returns>
        /// A new <see cref="ValidationContext"/> instance, using the
        /// <see cref="EntityContainer.ValidationContext"/> as the parent context
        /// if available.
        /// </returns>
        private ValidationContext CreateValidationContext()
        {
            // Get the validation context from the entity container if available,
            // otherwise create a new context.
            ValidationContext parentContext = null;
            Entity            rootEntity    = this.Entity;

            if (rootEntity != null && rootEntity.EntitySet != null && rootEntity.EntitySet.EntityContainer != null)
            {
                parentContext = rootEntity.EntitySet.EntityContainer.ValidationContext;
            }

            return(ValidationUtilities.CreateValidationContext(this, parentContext));
        }