使用 InsertAllOnSubmit 将列表对象更新到数据库

Posted

技术标签:

【中文标题】使用 InsertAllOnSubmit 将列表对象更新到数据库【英文标题】:Update list object to database using InsertAllOnSubmit 【发布时间】:2019-10-10 15:05:02 【问题描述】:

我正在尝试使用 Linq 2 Sql 将更改保存到数据库,使用 InserAllOnSubmit 方法,它既不插入记录也不抛出错误/异常。 如果我在代码中犯了任何错误,请帮助我。

提前致谢。

public void UpdateCoachingAssessmentInfo(CoachingAssessmentViewModel model)
    
        Guid userGuid = model.UserGuid;
        try
        
            using (var ctxAdmin = new MemberDataContext(ConfigurationManager.ConnectionStrings[Constants.CONFIG_KEY_MEMBER_CONNECTION_STRING].ToString()))
            
                List<CAT> userCat = new List<CAT>();
                List<QandR> userQr = model.QuestionResponseIds;
                foreach (var x in userQr)
                
                    CAT objCAT = new CAT();
                    objCAT.userGuid = model.UserGuid;
                    objCAT.Question_Id = x.QuestionId;
                    if (x.OptionId != null && x.OptionId != 0)
                    
                        objCAT.Option_Id = x.OptionId;
                        objCAT.Option_Response = null;
                    
                    else
                    
                        objCAT.Option_Response = x.OptionResponse ?? null;
                        objCAT.Option_Id = null;
                    

                    objCAT.createDate = DateTime.Now;
                    objCAT.updateDate = DateTime.Now;
                    userCat.Add(objCAT);
                
                ctxAdmin.CATs.InsertAllOnSubmit(userCat);
            
            UpdateCoachingAssessmentEligibility(userGuid);
        

        catch (Exception ex)
        
            throw new Exception("Unable to save changes to db.", ex);
        

    

【问题讨论】:

【参考方案1】:

您应该在ctxAdmin.CATs.InsertAllOnSubmit(userCat) 之后添加ctxAdmin.CATs.SubmitChanges()

根据documentation

在调用 SubmitChanges 之前,添加的实体不会出现在查询结果中。

如果有帮助,请告诉我。

【讨论】:

添加后 ctxAdmin.CATs.InsertAllOnSubmit(userCat); ctxAdmin.SubmitChanges();它会抛出异常:无法添加具有已使用密钥的实体。 这意味着您正在插入具有重复主键的行。检查您尝试插入的实体的主键字段(userGuid Question_Id Option_Id )。 CATs 实体完全没有任何约束。 我将 Nam Le 建议标记为答案,对于他对主键约束的评论,我的问题与此相关。谢谢南乐。

以上是关于使用 InsertAllOnSubmit 将列表对象更新到数据库的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL 增,删,改

tsc4503批量导入

将哈希表转换为 OCaml 中的对列表(键、值)

使用 NSSortDescriptor 将“nil”值保留在列表底部

使用 firebase 按最新消息对聊天列表进行排序

如何对数组列表的元素求和?