using Dasync.Collections;
var booking = _dbContext.Bookings.SingleAsync(b => b.Id == id, cancellationToken);
This will result in the booking sometimes being grabbed, but in most cases it seems like much more happens than you want, e.g. it crawls all the relations, consumes a tonne of memory and eventually crashes your app.
I'm not sure how we can really solve this other than an analyzer that detects usage on a DbSet<T> and says, "No, don't do this".
cc: @anthony-keller