asp.net MVC中的用户代码未对DbUpdateException进行处理

时间:2015-12-10 04:59:17

标签: asp.net asp.net-mvc signalr chat dbcontext

我正在使用Jobbr.net之类的聊天服务器。当我关闭群组聊天标签时,我得到DbUpdateException未被用户代码

处理

代码:

public void CommitChanges()
{
 _db.SaveChanges();
}

Click here to see screenshot

1 个答案:

答案 0 :(得分:1)

您的数据模型或要保留的数据看起来有问题。我猜你试图保存实体时没有设置一些必填字段或外键。

尝试捕获并记录System.Data.Entity.Infrastructure.DbUpdateException。它应该告诉你哪个实体导致了问题。以下是我们使用的一些日志记录代码:

using NLog;

private static Logger Logger = LogManager.GetCurrentClassLogger();

try {
    _db.SaveChanges();
}
catch (System.Data.Entity.Infrastructure.DbUpdateException upEx) {

    if (upEx.Entries != null && upEx.Entries.Any()) {
        Logger.Debug("DbUpdateException contained '{0}' entries:", upEx.Entries.Count());

         // get info about the Entity that produced the error
         foreach (var dbEntityEntry in upEx.Entries) {
             if (dbEntityEntry.Entity != null) {
                 var entityType = dbEntityEntry.Entity.GetType();
                 try {
                     var id = entityType.GetProperty("Id").GetValue(dbEntityEntry.Entity, null);
                     Logger.Debug("DbUpdateException contains DbEntityEntry - Type: '{0}', Id: '{1}', State: '{2}'", entityType.Name, id, dbEntityEntry.State.ToString("G"));
                 } catch (Exception) {
                     Logger.Debug("DbUpdateException contains DbEntityEntry - Type '{0}', Id: unknown, State: '{2}'", entityType.Name, dbEntityEntry.State.ToString("G"));
                 }
             }
         }
    } 
}