UpdateAsync 出错 The instance of entity type '' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

场景:

当我们重写UpdateAsync的时候,基本的操作:

  1、传入更新的数据;

  2、根据传入的ID,查询到实体;

  3、根据实体中的条件判断是否要更新数据,比如“报关单状态改变”,状态改变,就将传入的更新数据,赋值给实体;

  4、调用UpdateAsync,进行更新

 

错误:

  The instance of entity type 'menu' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

谷歌翻译:

  无法跟踪实体类型'menu'的实例,因为已经跟踪了另一个具有相同'{'Id'}键值的实例.附加现有实体时,请确保仅附加一个具有给定键值的实体实例.

解决方法:

  这个问题,是 EF Core 对实体默认进行状态跟踪造成的,说的高大上一点,叫:线程安全 导致的,

  解决方法很简单,即:对读取的数据不进行跟踪即可!可以使用 AsNoTracking 属性,也可以手动控制!

//查询这条报关单的数据,是否有
STKForm.STKFormHead formheadExist = _Repository.GetAll().Where(x => x.entryId == formhead.entryId && x.IsDeleted == false).AsNoTracking().FirstOrDefault();   //AsNoTracking加上之后,UpdateAsync不会报错,不然会报

 

 

 

 

posted @ 2021-09-26 20:38  殇琉璃  阅读(1315)  评论(0编辑  收藏  举报