读取导致异常错误的 ID 信息

Read information of ID causing error from Exception

提问人:Sebastian 提问时间:5/13/2022 更新时间:5/13/2022 访问量:191

问:

在 C# 中,我的 Sql Entity Framework 6 插入是返回异常

无法添加或更新子行:外键约束失败 (., 约束外键 () 删除级联时引用 ()portaldbmasterselectionhistoryFK_MasterSelectionHistory_Contacts_MasterIdMasterIdmastersId

尝试将记录列表插入数据库时发生异常

try{
    List<int> masterIds =  // around 20k ID exists 
                    foreach (int id in masterIds)
                    {
                        //Add Selection History to record against the contact!
                        #region insert to ContactSelectionHistory 
                        MasterSelectionHistory dbEntry = new MasterSelectionHistory();
                        dbEntry.MasterId = id;
                        dbEntry.SelectionId = --;
                        dbEntry.DateCreated = DateTime.Now;
                        dbEntry.CreatedBy = ---;
                        context.MasterSelectionHistory.Add(dbEntry);
                        #endregion
                    }  
    
                    //Save all the db context changes
                    await context.SaveChangesAsync().ConfigureAwait(false);  //EXception is throwing from here
 }
                catch (Exception ex)
                {
                   //Can read ID causing error from ex object ?
                    throw new InvalidOperationException(ex.Message);
                }

有没有办法知道哪个 ID 导致了异常对象的问题

C# MySQL 实体框架 异常

评论

0赞 Denis Micheal 5/13/2022
我会在 foreach 循环中添加另一个 try/catch,这样代码的 catch 部分也可以访问 id 变量。
0赞 Sebastian 5/13/2022
上下文。SaveChangesAsync() 中。is outside the loop 表示将所有条目一起保存。节省 1 by 1 是昂贵的操作,因为列表很大
0赞 Denis Micheal 5/13/2022
哎呀,没有看到 SaveChangesAsync,我的坏,然后我会以这种方式编写它,当我遍历巨大的列表时,我检查了 masters 表中已经存在的 id,以及我将添加到最终列表中的 ID,我将批量插入我的目标表中。SaveChanges 对于如此巨大的插入是低效的,我更喜欢使用这个我发现很容易的 BulkInsert

答: 暂无答案