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

时间:2018-09-19 20:48:37

标签: c# entity-framework-core

我有一个使用EF Core 2.1的控制台.NET Core 2.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. 外部应用从数据中删除行
  3. 再次调用上述代码->异常

我如何告诉DbContext该实体不再存在于数据库中...刷新您的条目并将该行再次添加到数据库中?因为它是一个控制台应用程序,所以仅使用了1个DbContext实例,并将其注入实现此方法的类中。

1 个答案:

答案 0 :(得分:0)

您似乎拥有一个长期存在的静态环境。我建议将上述内容包装在using语句中,并考虑使用短暂的上下文。这样,您的上下文就不会认为其已插入实体。