Isolation lives in the database, not the ORM
What we did
PostgreSQL row-level security, with the tenant set as a session variable on every connection.
Why
An ORM helper can be bypassed by the next developer writing a raw query at 6pm. A database policy cannot. It is also the answer a security reviewer wants to hear.
What it cost
Every connection must set the tenant, and connection pooling makes that easy to get wrong. All queries route through a wrapper that refuses to run when the tenant is unset, failing closed, loudly, in development.