使用数据库上下文的实体集合添加条目后,如果尝试调用RemoveRange,则会收到InvalidOperationException。
如果我使用数据库上下文的另一个实例来调用RemoveRange,则可以正常工作。但是当我使用相同的数据库上下文时,它将失败。
var ingredient = new Ingredient()
{
Id = 1,
Name = "Pepper",
};
await context.Ingredients.AddAsync(ingredient);
await context.SaveChangesAsync();
context.Ingredients.RemoveRange(context.Ingredients);
await context.SaveChangesAsync();
错误消息是:
System.InvalidOperationException:无法跟踪实体类型'Ingredient'的实例,因为已经跟踪了另一个键值为'{IngredientId:1}'的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。
如果我正确理解,如果尚未跟踪该实体,则Remove()和RemoveRange()会附加该实体。在我的情况下,一个实例已经被跟踪了……是的,但是
什么是删除所有条目的正确方法,而无需关心哪些实体已被跟踪和哪些实体尚未被跟踪?
有任何线索吗?
答案 0 :(得分:0)
尝试将context.Ingredients.RemoveRange(context.Ingredients);
行替换为以下内容:
var tempIngredients = context.Ingredients.ToList();
context.Ingredients.RemoveRange(tempIngredients);