2

我正在使用 .NET MVC 3 和 PetaPoco 构建一个带有共享数据库的多租户应用程序。租户 ID(连同其他信息)在登录时保存在 FormsAuth cookie 中,并且可通过 BaseController 属性提供给所有控制器。大多数表(即除了主“租户”表之外)包括一个 TenantId 列。

不是手动将“WHERE TenantId = X”添加到功能表上的所有 CRUD,有没有一种方法可以在查询执行之前将其动态添加到查询中?换句话说,也许维护一个表列表,如果查询是针对其中一个表,那么在 TenantId 过滤器中动态添加?

好处当然是它消除了手动添加过滤器的需要,从而减少了它被遗漏的机会。我确实找到了一个使用 NHibernate 的示例,我怀疑它可以重新利用。我正在使用 Ninject 以防万一。

4

1 回答 1

0

Database 类上有一个 OnCommandExecuting 方法,您可以在自己的子类中覆盖该方法,并在执行之前根据需要修改 sql。我们使用此功能在 Sql Server 和 Oracle 之间转换 isnull/nvl。

您可以在 sql 中留下一个标记并在此处替换它。

于 2011-10-04T11:19:23.727 回答