“在调用ObjectChangeConflict.Resolve()之后,已尝试附加或添加非新的实体...”

时间:2009-09-28 21:01:39

标签: linq-to-sql

我有一对类,当如下所示一起更新时,保证会导致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);
            }
        }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我的解决方案是将触发器设置的字段的dbml“Update Check”属性设置为“Never” - 这适用于应用程序永远不会修改这些字段的情况。否则,我必须调用SubmitChanges两次 - 一次在编辑父对象之后,然后在添加子对象之后再次调用(然后再次检索父对象)。

相关问题