为什么Linq-To-Sql抱怨当我使用context.table.attach()时已经存在记录

本文关键字:attach 记录 存在 table context Linq-To-Sql 为什么 | 更新日期: 2023-09-27 18:31:43

我正在尝试使用全新生成的 POCO 更新优化搜索记录的所有值,而无需手动重置我的 Linq-to-sql 对象中的所有值。 为此,我设置了任何我想要不为 null 的值,然后调用:

        if (person.xosPodOptimizedSearch == null)
        {
            person.xosPodOptimizedSearch = record;
        }
        else
        {
            context.xosPodOptimizedSearches.Attach(record, true);
            context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, record);
        }

此代码的目的是,如果我的person记录没有xosPodOptimizedSearch记录,则添加它。 如果此人已经有一个,我希望使用我刚刚创建的 POCO 中的任何值对其进行更新。

但是,当这个运行并且运行.attach(record, true) Linq-to-sql时会抛出一个DuplicateKeyException occurred: Cannot add an entity with a key that is already in use,这是愚蠢的,因为我知道存在记录,这就是为什么我首先使用attach()而不是.InsertOnSubmit()

如何使用我生成的值 100% 更新数据,而不使用该记录的数据库中的任何值?

为什么Linq-To-Sql抱怨当我使用context.table.attach()时已经存在记录

关系,这是我的错误。 我混淆了Linq-to-sql,因为在我的代码早期,我有一个杂散的record.xosPerson = person;调用,所以它只认为人员记录与新记录相关联,而忘记了旧记录的存在。