zoukankan      html  css  js  c++  java
  • The instance of entity type 'XXX' cannot be tracked because another instance with the same key value for {'XX'} is already being tracked.

    在做单元测试的时候碰到以下报错:

    The instance of entity type 'XXX' cannot be tracked because another instance with the same key value for {'XX'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.
    

    具体报错代码如下:

    项目平时运行是没问题的,但在单元测试时会报错,可能跟在测试时一个方法里多次调用有关。
    我的做法如下:使用try catch,在异常里操作
    1、修改状态 Entry (entity).State = EntityState.Detached;
    2、再次调用本身

    具体代码如下:

    public void Detach<T> (T entity) where T : class 
    {
        Entry (entity).State = EntityState.Detached;
    }
    
    public void EditRange<T> (ICollection<T> entities) where T : class 
    {
        Set<T> ().UpdateRange (entities.ToArray ());
    }
    
    public virtual void EditRange(ICollection<T> entities, bool again = true)
    {
        bool TryAgain = again;
        try
        {
            _dbContext.EditRange(entities);
        }
        catch (Exception ex)
        {
            if (TryAgain)
            {
                foreach (var item in entities)
                {
                    Detach(item);
                }
                EditRange(entities, false);
                return;
            }
            throw new Exception(ex.Message);
        }
    }
    
  • 相关阅读:
    2016-8-29
    2016-8-25
    2016-8-24
    2016-8-23
    2016-8-22
    2016-8-16
    2016-8-15
    深圳_多测师面试 __腾讯云/_高级讲师肖sir
    深圳_多测师面试 _新字节跳动(2020年10月23日)_高级讲师肖sir
    多测师讲解自动化 _RF_(202)高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/hwxing/p/14179404.html
Copyright © 2011-2022 走看看