使用 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 将列表对象更新到数据库的主要内容,如果未能解决你的问题,请参考以下文章