Start here. This is the direct spoken answer to practice first.
Why this matters
Audit fields explain when and by whom data changed, while richer change tracking may need history beyond the current row. The design affects supportability, compliance, storage, and write-path complexity.
I would usually store audit fields such as CreatedAt, CreatedBy, UpdatedAt, and UpdatedBy on important tables. The API can populate them from a trusted server-side user context, not from client input. EF Core can set these values in SaveChanges logic or through interceptors. This helps support and debugging understand who changed data and when.