首頁 >後端開發 >C++ >如何有效處理和調試實體驗證錯誤在實體框架中?

如何有效處理和調試實體驗證錯誤在實體框架中?

Linda Hamilton
Linda Hamilton原創
2025-01-28 23:16:10540瀏覽

How to Effectively Handle and Debug Entity Validation Errors in Entity Framework?

實體驗證錯誤詳解

遇到錯誤消息“一個或多個實體的驗證失敗。查看“EntityValidationErrors”屬性了解更多詳情”時,可以訪問驗證錯誤數組。

檢查驗證錯誤

在調試過程中,可以通過Visual Studio訪問驗證錯誤數組。但是,手動訪問錯誤也是可行的:

<code class="language-csharp">try
{
    // 代码
    context.SaveChanges();
}
catch (DbEntityValidationException e)
{
    foreach (var eve in e.EntityValidationErrors)
    {
        Console.WriteLine("实体: \"{0}\", 状态: \"{1}\"", eve.Entry.Entity.GetType().Name, eve.Entry.State);
        foreach(var ve in eve.ValidationErrors)
        {
            Console.WriteLine("- 属性: \"{0}\", 错误: \"{1}\"", ve.PropertyName, ve.ErrorMessage);
        }
    }
    throw;
}</code>

EntityValidationErrors屬性包含驗證失敗的實體,而ValidationErrors包含屬性級別的錯誤列表。

高級改進

顯示屬性值:

<code class="language-csharp">foreach(var ve in eve.ValidationErrors)
{
    Console.WriteLine("- 属性: \"{0}\", 值: \"{1}\", 错误: \"{2}\"", ve.PropertyName, eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName), ve.ErrorMessage);
}</code>

使用Debug.Write:

<code class="language-csharp">Debug.Write("- 属性: \"{0}\", 值: \"{1}\", 错误: \"{2}\"", ve.PropertyName, eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName), ve.ErrorMessage);</code>

包含詳細消息的自定義異常:

此異常以格式化消息記錄驗證錯誤:

<code class="language-csharp">public class FormattedDbEntityValidationException : Exception
{
    public override string Message => InnerException != null ? InnerException?.ToDetailedString() : "";
}</code>

重寫SaveChanges:

<code class="language-csharp">public override int SaveChanges()
{
    try
    {
        return base.SaveChanges();
    }
    catch (DbEntityValidationException e)
    {
        throw new FormattedDbEntityValidationException(e);
    }
}</code>

這確保了驗證細節將顯示在錯誤日誌(例如Elmah)中。

以上是如何有效處理和調試實體驗證錯誤在實體框架中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn