lucamilan
2/14/2013 - 10:42 PM

DbEntityValidationMessageParser.cs

namespace EFCodeFirstValidation.Helpers
{
    using System.Linq;
    using System.Text;
    using System.Data.Entity.Validation;
    using System.Collections.Generic;

    class DbEntityValidationMessageParser
    {
        internal static string GetErrorMessage(DbEntityValidationException validationException)
        {
            StringBuilder messageBuilder = new StringBuilder("Validation Errors").AppendLine();

            var messages = from validationResult in validationException.EntityValidationErrors
                           select GetErrorMessage(validationResult);

            messages.ToList<string>().ForEach(m => messageBuilder.AppendLine(m));

            return messageBuilder.ToString();
        }

        internal static string GetErrorMessage(IEnumerable<DbEntityValidationResult> validationResults)
        {
            StringBuilder errorMessagBuilder = new StringBuilder();

            validationResults.ToList<DbEntityValidationResult>()
                .ForEach(result => errorMessagBuilder.AppendLine(GetErrorMessage(result)));

            return errorMessagBuilder.ToString();
        }

        internal static string GetErrorMessage(DbEntityValidationResult validationResult)
        {
            return GetErrorMessage(validationResult.ValidationErrors);
        }

        internal static string GetErrorMessage(ICollection<DbValidationError> validationErrors)
        {
            StringBuilder errorMessageBuilder = new StringBuilder();

            List<string> errorMessages = (from validationError in validationErrors
                                          select string.Format(
                                              "Property: {0}, Error Message: {1}",
                                              validationError.PropertyName,
                                              validationError.ErrorMessage)).ToList<string>();

            errorMessages.ToList<string>().ForEach(m => errorMessageBuilder.AppendLine(m));

            return errorMessageBuilder.ToString();
        }
    }
}