代码之家  ›  专栏  ›  技术社区  ›  Gautam T Goudar

插入/删除/插入导致跟踪错误

  •  -1
  • Gautam T Goudar  · 技术社区  · 6 年前

    我有一个控制台.NETCore2.1应用程序,它使用的是EFCore2.1。它与数据库通信以读取和插入行。同时,其他应用程序也在更新此数据库。

    无法跟踪实体类型“XYZ”的实例,因为已在跟踪另一个键值为“{ID:11,ABC:136,DEF:97}”的实例。附着现有实体时,请确保仅附着一个具有给定键值的实体实例。

    下面是我的代码

    var entity = PopulateValuesFor(XYZ);
    
    var existingXYZ = _Context.TABLE1
                .Include(r => r.TABLE2)
                .Include(r => r.TABLE3)
                .AsNoTracking()
                .FirstOrDefault(r => r.Id == 1234);                                 
    
            if (existingXYZ == null)
            {
                _Context.Add(entity);
            }
    

    流程是

    1. 上述代码称为-->行已安装
    2. 再次调用上述代码-->例外

    如何告诉DbContext实体不再在数据库中。。。清除您的条目并再次将此行添加到数据库?因为它是一个控制台应用程序,所以只使用了DbContext的一个实例,get被注入到实现这个方法的类中。

    1 回复  |  直到 6 年前
        1
  •  0
  •   kmcc049    6 年前

    你似乎有一个长期的静态上下文。我建议用using语句包装上面的内容,并使用一个短暂的上下文。这样你的上下文就不会认为它已经插入了实体。