How to Use ExecuteUpdateAsync and SaveChangesAsync in One Transaction
Changing a stock count with ExecuteUpdateAsync and recording the reason with SaveChangesAsync looks like one job, but those are two separate transactions unless you say otherwise. If the second fails, the count has changed and nothing explains why. Here's that failure, and the fix.
