【问题标题】:Update list object to database using InsertAllOnSubmit使用 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);
        }

    }

【问题讨论】:

    标签: c# .net linq asp.net-web-api


    【解决方案1】:

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

    根据documentation

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

    如果有帮助,请告诉我。

    【讨论】:

    • 添加后 ctxAdmin.CATs.InsertAllOnSubmit(userCat); ctxAdmin.SubmitChanges();它会抛出异常:无法添加具有已使用密钥的实体。
    • 这意味着您正在插入具有重复主键的行。检查您尝试插入的实体的主键字段(userGuid Question_Id Option_Id )。
    • CATs 实体完全没有任何约束。
    • 我将 Nam Le 建议标记为答案,对于他对主键约束的评论,我的问题与此相关。谢谢南乐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2019-07-26
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多