我如何知道哪个字段导致 Entity Framework 7 中的 DbUpdateException?

Hui Liu-MSFT 48,531 信誉分 Microsoft 供应商
2024-04-11T07:01:38.1133333+00:00

保存到 SQL Server 时,如何在 C# 中获取导致 Entity Framework 7 中 DbUpdateException 的实体和字段?

Note:此问题总结整理于:How would I know which field causing DbUpdateException in Entity Framework 7 ?

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
49 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 45,006 信誉分 Microsoft 供应商
    2024-04-11T09:22:15.76+00:00

    DbUpdateException 在许多情况下包含更新失败,并且很难一次性获取失败字段。目前使用 C# 获取更新失败的字段,可以按如下方式更改代码:

                 try
                 {
                     using Db db = new Db();
                     T_Row row = db.T_Rows.Single(e=>e.id == 123)
                     row.f1 = ...;
                     db. SaveChanges();
                     row.f2 = ...;
                     db. SaveChanges();
                     row.fn =  …;
                     db. SaveChanges();
                 }
                 catch (DbUpdateException ex)
                 {
                    var failedEntries = ex.Entries;
                         foreach (var entry in failedEntries)
                         {
                             var entityName = entry. Metadata. Name;
                             var properties = entry.Properties.Where(p => p.IsModified && !p.IsTemporary);
                             foreach (var property in properties)
                             {
                                 var propertyName = property.Metadata.Name;
                                 Console.WriteLine($"Failed to update field: {propertyName} in entity: {entityName}");
                             }
                         }
                 }
    
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。