首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架-将EntityValidationErrors打印到日志

实体框架-将EntityValidationErrors打印到日志
EN

Stack Overflow用户
提问于 2012-12-12 01:36:14
回答 3查看 11.9K关注 0票数 18

打印日志时出现follo0wing错误

代码语言:javascript
运行
复制
Message: Validation failed for one or more entities. See 'EntityValidationErrors'  
property for more details.; Stack Trace:    at 
System.Data.Entity.Internal.InternalContext.SaveChanges()

EntityValidationErrors对象在不同的节点中保存完整的详细错误。打印它的最佳方式是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-11 15:59:08

更清晰的语法:

代码语言:javascript
运行
复制
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
     Logger.WriteError("{0}{1}Validation errors:{1}{2}", ex, Environment.NewLine, ex.EntityValidationErrors.Select(e => string.Join(Environment.NewLine, e.ValidationErrors.Select(v => string.Format("{0} - {1}", v.PropertyName, v.ErrorMessage)))));
     throw;
}
票数 29
EN

Stack Overflow用户

发布于 2014-01-24 17:40:00

下面是一些扩展方法:

代码语言:javascript
运行
复制
/// <summary>
///     A DbEntityValidationException extension method that formates validation errors to string.
/// </summary>
public static string DbEntityValidationExceptionToString(this DbEntityValidationException e)
{
    var validationErrors = e.DbEntityValidationResultToString();
    var exceptionMessage = string.Format("{0}{1}Validation errors:{1}{2}", e, Environment.NewLine, validationErrors);
    return exceptionMessage;
}

/// <summary>
///     A DbEntityValidationException extension method that aggregate database entity validation results to string.
/// </summary>
public static string DbEntityValidationResultToString(this DbEntityValidationException e)
{
    return e.EntityValidationErrors
            .Select(dbEntityValidationResult => dbEntityValidationResult.DbValidationErrorsToString(dbEntityValidationResult.ValidationErrors))
            .Aggregate(string.Empty, (current, next) => string.Format("{0}{1}{2}", current, Environment.NewLine, next));
}

/// <summary>
///     A DbEntityValidationResult extension method that to strings database validation errors.
/// </summary>
public static string DbValidationErrorsToString(this DbEntityValidationResult dbEntityValidationResult, IEnumerable<DbValidationError> dbValidationErrors)
{
    var entityName = string.Format("[{0}]", dbEntityValidationResult.Entry.Entity.GetType().Name);
    const string indentation = "\t - ";
    var aggregatedValidationErrorMessages = dbValidationErrors.Select(error => string.Format("[{0} - {1}]", error.PropertyName, error.ErrorMessage))
                                           .Aggregate(string.Empty, (current, validationErrorMessage) => current + (Environment.NewLine + indentation + validationErrorMessage));
    return string.Format("{0}{1}", entityName, aggregatedValidationErrorMessages);
}

用法1:

代码语言:javascript
运行
复制
catch(DbEntityValidationException e) {
    Logger.WriteError(e.DbEntityValidationExceptionToString());
    throw;      
}

应输出:

代码语言:javascript
运行
复制
StackTrace
Validation errores:
[EntityName]
    - [Property - ErrorMessage]
    - [Property - ErrorMessage]
[EntityName2]
    - [Property - ErrorMessage]
    - [Property - ErrorMessage]

用法2:

代码语言:javascript
运行
复制
catch(DbEntityValidationException e) {
    Logger.WriteError(e.DbEntityValidationResultToString());
    throw;      
}

应输出:

代码语言:javascript
运行
复制
[EntityName]
    - [Property - ErrorMessage]
    - [Property - ErrorMessage]
[EntityName2]
    - [Property - ErrorMessage]
    - [Property - ErrorMessage]
票数 26
EN

Stack Overflow用户

发布于 2012-12-12 01:40:48

你可以试试这样的东西

代码语言:javascript
运行
复制
   foreach (var failure in ex.EntityValidationErrors)
    {
       string validationErrors="";

        foreach (var error in failure.ValidationErrors)
        {
           validationErrors+=error.PropertyName+"  "+error.ErrorMessage;
        }
    }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13825495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档