我正在使用 .NET MVC 3 和 PetaPoco 构建一个带有共享数据库的多租户应用程序。租户 ID(连同其他信息)在登录时保存在 FormsAuth cookie 中,并且可通过 BaseController 属性提供给所有控制器。大多数表(即除了主“租户”表之外)包括一个 TenantId 列。
不是手动将“WHERE TenantId = X”添加到功能表上的所有 CRUD,有没有一种方法可以在查询执行之前将其动态添加到查询中?换句话说,也许维护一个表列表,如果查询是针对其中一个表,那么在 TenantId 过滤器中动态添加?
好处当然是它消除了手动添加过滤器的需要,从而减少了它被遗漏的机会。我确实找到了一个使用 NHibernate 的示例,我怀疑它可以重新利用。我正在使用 Ninject 以防万一。