Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架-更新错误_Entity Framework - Fatal编程技术网

Entity framework 实体框架-更新错误

Entity framework 实体框架-更新错误,entity-framework,Entity Framework,当我第二次尝试使用实体框架编辑同一记录时,我经常会遇到错误: 附加“DomainClasses.Item”类型的实体失败,因为 相同类型的另一个实体已具有相同的主键 价值使用“附加”方法或设置 实体的状态为“未更改”或“已修改”,如果实体中有任何实体 图形具有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在里面 本例使用“添加”方法或“添加”实体状态来跟踪 然后将非新实体的状态设置为“未更改”或 “修改”视情况而定 代码非常简单: public void InsertOrU

当我第二次尝试使用实体框架编辑同一记录时,我经常会遇到错误:

附加“DomainClasses.Item”类型的实体失败,因为 相同类型的另一个实体已具有相同的主键 价值使用“附加”方法或设置 实体的状态为“未更改”或“已修改”,如果实体中有任何实体 图形具有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在里面 本例使用“添加”方法或“添加”实体状态来跟踪 然后将非新实体的状态设置为“未更改”或 “修改”视情况而定

代码非常简单:

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设置为非默认值,该值在创建后对所有实体都不同?最后,我在保存编辑之前创建了一个新的上下文实例,解决了这个问题。您可以在上查看我的答案。