Entity framework 实体框架-更新错误
当我第二次尝试使用实体框架编辑同一记录时,我经常会遇到错误: 附加“DomainClasses.Item”类型的实体失败,因为 相同类型的另一个实体已具有相同的主键 价值使用“附加”方法或设置 实体的状态为“未更改”或“已修改”,如果实体中有任何实体 图形具有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在里面 本例使用“添加”方法或“添加”实体状态来跟踪 然后将非新实体的状态设置为“未更改”或 “修改”视情况而定 代码非常简单:Entity framework 实体框架-更新错误,entity-framework,Entity Framework,当我第二次尝试使用实体框架编辑同一记录时,我经常会遇到错误: 附加“DomainClasses.Item”类型的实体失败,因为 相同类型的另一个实体已具有相同的主键 价值使用“附加”方法或设置 实体的状态为“未更改”或“已修改”,如果实体中有任何实体 图形具有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在里面 本例使用“添加”方法或“添加”实体状态来跟踪 然后将非新实体的状态设置为“未更改”或 “修改”视情况而定 代码非常简单: public void InsertOrU
public void InsertOrUpdate(Item entity)
{
if (entity.Id == default(int))
{
_context.SetAdd(entity);
}
else
{
_context.SetModified(entity);
}
_context.SaveChangesAsync();
}
如果加载了启用跟踪的实体,使其已在上下文中,则可能会发生此错误。然后,您尝试再次连接,但失败了。如果在调用InsertOrUpdate之前将实体加载为Notracking(),则错误应该消失 能否在
\u context.SetModified(entity)
上设置断点,并确认正在调用它。是的,正在调用它。是否将ID设置为非默认值,该值在创建后对所有实体都不同?最后,我在保存编辑之前创建了一个新的上下文实例,解决了这个问题。您可以在上查看我的答案。