我有一对类,当如下所示一起更新时,保证会导致ChangeConflictException,因为子对象表上的触发器更新父对象记录上的值。我相信我正在按照正确的程序解决冲突并重新提交更新,但是在调用第二个db.SubmitChanges(或者即使我调用db.GetChangeSet())时,我得到“已尝试附加或添加一个不是新的实体blah blah blah“error。
using (SurveyDB db = new SurveyDB())
{
Parent p = db.Parents.Single(t => t.Id == 1);
p.Children.Add(new Child {...});
p.SomeProperty = "new value";
try
{
db.SubmitChanges();
}
catch (ChangeConflictException e)
{
foreach (ObjectChangeConflict o in db.ChangeConflicts)
o.Resolve(RefreshMode.KeepChanges, true);
db.SubmitChanges(ConflictMode.FailOnFirstConflict);
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
我的解决方案是将触发器设置的字段的dbml“Update Check”属性设置为“Never” - 这适用于应用程序永远不会修改这些字段的情况。否则,我必须调用SubmitChanges两次 - 一次在编辑父对象之后,然后在添加子对象之后再次调用(然后再次检索父对象)。