TL;DR We had a single-tenant Angular + .NET 10 SaaS where every row was scoped by UserId . To support firms (multiple lawyers sharing data), we needed multi-tenant workspaces — but rewriting every query was off the table. EF Core's HasQueryFilter made it possible to flip 9 tables to multi-tenant in a single weekend, with zero query call sites changed. Here's the pattern. Context I'm building NeoJurídico , a court-process monitoring platform for Colombian lawyers. Plan Bufete users need to share monitored processes, alerts, and notifications across their team. Originally, every tenanted entity had int UserId as the implicit tenant. Service code looked like: var processes = await _db . ProcessSubscriptions . Where ( p => p . UserId == userId ) . ToListAsync (); Enter fullscreen mode Exit fullscreen mode If we kept this pattern but added WorkspaceId next to it, every controller had to be touched. That's 60+ files. No. The plan Add int WorkspaceId to every tenanted entity (9 tables).…