【发布时间】:2016-10-18 19:38:56
【问题描述】:
我得到错误:
无法跟踪实体类型“瞳孔”的实例,因为另一个 已在跟踪具有相同密钥的此类实例。什么时候 添加新实体,对于大多数键类型,一个唯一的临时键值 如果没有设置键(即,如果键属性已分配)将被创建 其类型的默认值)。如果您明确设置密钥 新实体的值,确保它们不会与现有实体发生冲突 为其他新实体生成的实体或临时值。什么时候 附加现有实体,确保只有一个实体实例具有 给定的键值附加到上下文。
如果我会在此实例之前检索该实例,然后将其加载到上下文缓存中,我会理解此错误,但我没有!!!
var pupilsToDelete = pupilIds.Select(id => new Pupil { Id = id });
context.RemoveRange(pupilsToDelete.ToList());
await context.SaveChangesAsync();
在运行期间,学生 ID 都是不同的 ID!
为什么会出现这个错误?
【问题讨论】:
-
您是否 100% 确定没有加载任何
Pupils?pupilIds来自哪里?你有一个新的上下文实例吗? -
未从数据库加载学生。我还尝试了 context.entry(new Pupil(id = id).state = state.Deleted 并像在 EF6 中那样做了 context.savechanges() 但确实也导致了异常......