/// <summary> /// Format exception to string. /// </summary> /// <param name="ex">Exception which should be converted to string.</param> /// <returns>String that represent exception information.</returns> public static string FormatException(DbEntityValidationException ex) { if (ex == null) { throw new ArgumentNullException("ex"); } var newline = Environment.NewLine; StringBuilder validationErrors = new StringBuilder(); foreach (var entityValidationError in ex.EntityValidationErrors) { foreach (var validationError in entityValidationError.ValidationErrors) { var validationErrorDescription = string.Format("Property {0}. Error: {1}", validationError.PropertyName, validationError.ErrorMessage); validationErrors.AppendLine(validationErrorDescription); } } var message = ex.Message + newline + "Validation errors: " + validationErrors.ToString() + newline + "Exception type: " + ex.GetType().FullName + newline + ex.StackTrace + newline + newline; if (ex.InnerException != null) { message += "-----------------------------------------------------------" + newline + newline + "Inner exception: " + newline + FormatException(ex.InnerException); } return(message); }
private static string GetMessageFor(DbEntityValidationException exception) { return(string.Format("'{0}' - '{2}'{1} EntityValidationErrors{1}{3}{1} InnerExceptions{1}{4}{1} StackTrace{1}{5}", exception.GetType().Name, Environment.NewLine, exception.Message, GetEntityValidationErrors(exception), GetInnerExceptionsMessage(exception), exception.StackTrace)); }
private static string GetMessage(DbEntityValidationException ex) { var errors = new StringBuilder(); errors.AppendLine(); #if DEBUG errors.AppendLine($"[{ex.GetType().Name}]"); #endif foreach (var error in ex.EntityValidationErrors) { var entity = error.Entry.Entity; if (entity == null) { continue; } var entityName = GetEntityName(entity); errors.AppendLine($"{entityName}:"); errors.AppendLine(); foreach (var validation in error.ValidationErrors) { var propertyName = validation.PropertyName; var entityType = error.Entry.Entity.GetType(); var propInfo = entityType.GetProperty(propertyName); var attributes = propInfo?.GetCustomAttributes(typeof(DisplayAttribute), false); var displayAttribute = attributes?.Length > 0 ? attributes[0] as DisplayAttribute : null; propertyName = displayAttribute?.Name ?? propertyName; if (displayAttribute?.ResourceType != null) { var resourceManager = new ResourceManager(displayAttribute.ResourceType); propertyName = resourceManager.GetString(propertyName) ?? propertyName; } errors.AppendLine($"{propertyName}: {validation.ErrorMessage}"); } } return(errors.ToString()); }
public static void SendErrorToText(DbEntityValidationException ex) { var line = Environment.NewLine + Environment.NewLine; ErrorlineNo = ex.StackTrace.Substring(ex.StackTrace.Length - 7, 7); Errormsg = ex.GetType().Name.ToString(); extype = ex.GetType().ToString(); exurl = context.Current.Request.Url.ToString(); ErrorLocation = ex.Message.ToString(); hostIp = context.Current.Request.UserHostAddress; try { //Text File Path string filepath = context.Current.Server.MapPath("~/AuditFiles/"); if (!Directory.Exists(filepath)) { Directory.CreateDirectory(filepath); } var date = DateTime.Now; // Text File Name filepath += $"DbEntity {DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss").Replace(':', '-')}.txt"; if (!File.Exists(filepath)) { File.Create(filepath).Dispose(); } using (StreamWriter sw = File.AppendText(filepath)) { sw.WriteLine(" Exception Details on: " + DateTime.Now.ToString() + ""); sw.WriteLine("-----------------------------------------------------------------------------------"); sw.WriteLine(); sw.WriteLine("Error Line No : " + ErrorlineNo); sw.WriteLine("Error Message : " + Errormsg); sw.WriteLine("Exception Type : " + extype); sw.WriteLine("Error Location : " + ErrorLocation); sw.WriteLine("Error Page Url : " + exurl); sw.WriteLine("User Host IP : " + hostIp); sw.WriteLine(); sw.WriteLine("--------------------------------*Details*------------------------------------------"); sw.WriteLine(); foreach (var eve in ex.EntityValidationErrors) { var entity_type = string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); sw.WriteLine(entity_type); foreach (var ve in eve.ValidationErrors) { sw.WriteLine(string.Format("- Property: \"{0}\"", ve.PropertyName)); sw.WriteLine(string.Format("- Error: \"{0}\"", ve.ErrorMessage)); } var entry = eve.Entry; // Rollback changes switch (entry.State) { case EntityState.Added: entry.State = EntityState.Detached; break; case EntityState.Modified: entry.CurrentValues.SetValues(entry.OriginalValues); entry.State = EntityState.Unchanged; break; case EntityState.Deleted: entry.State = EntityState.Unchanged; break; } } sw.WriteLine(); sw.WriteLine("--------------------------------*End exception*------------------------------------"); sw.Flush(); sw.Close(); } } catch (Exception e) { e.ToString(); } }