Почему RemoveRange дает сбой на уже отслеживаемых объектах? - PullRequest
0 голосов
/ 30 сентября 2019

После добавления записи с использованием коллекции сущностей контекста БД, если я пытаюсь вызвать 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 () прикрепят объект, если он еще не отслежен,В моем случае экземпляр уже отслеживается ... верно ... но тогда,

, что будет правильным способом удалить все записи, не заботясь о том, какие объекты уже отслежены, а какиееще не отслежены?

Есть какие-либо подсказки?

1 Ответ

0 голосов
/ 30 сентября 2019

Попробуйте заменить строку context.Ingredients.RemoveRange(context.Ingredients); на следующую:

var tempIngredients = context.Ingredients.ToList(); 
context.Ingredients.RemoveRange(tempIngredients);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...