SaveChanges вернул 0 после правки сущности из AsNoTracking-запроса
Разработчик добавил AsNoTracking во все запросы репозитория ради производительности. После этого перестал работать сценарий оплаты:
var order = await db.Orders.AsNoTracking().FirstAsync(o => o.Id == id);
order.Status = OrderStatus.Paid;
var affected = await db.SaveChangesAsync(); // affected == 0, статус в базе прежний
Почему изменение не сохраняется?
- AsNoTracking запрещает изменять свойства загруженной сущности, поэтому присваивание не применилось к объекту
- Изменения сохранены, а 0 — это счётчик затронутых таблиц, а не строк
- Сущность не отслеживается контекстом: EF не знает о правке и не генерирует UPDATE
- Не открыта явная транзакция, поэтому SaveChanges не отправил изменения в базу
