我有一个使用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);
}
流程是
我如何告诉DbContext该实体不再存在于数据库中...刷新您的条目并将该行再次添加到数据库中?因为它是一个控制台应用程序,所以仅使用了1个DbContext实例,并将其注入实现此方法的类中。
答案 0 :(得分:0)
您似乎拥有一个长期存在的静态环境。我建议将上述内容包装在using语句中,并考虑使用短暂的上下文。这样,您的上下文就不会认为其已插入实体。