Start here. This is the direct spoken answer to practice first.
Why this question matters
Optimistic concurrency avoids holding a database lock while a user edits. A tracked token is included in the eventual update condition so the application can detect that the stored row changed after it was read.
I expose a concurrency token with the resource, commonly a SQL Server rowversion encoded as an ETag or DTO field. The client returns that token when updating. EF Core includes the original token in the UPDATE predicate; if another write changed the row, zero rows are affected and SaveChangesAsync throws DbUpdateConcurrencyException. I return a conflict or failed precondition instead of silently overwriting the newer data.