为什么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,因为在我的代码早期,我有一个杂散的record.xosPerson = person;
调用,所以它只认为人员记录与新记录相关联,而忘记了旧记录的存在。