“动态注入”一个WHERE子句w / PetaPoco

时间:2011-10-03 20:21:07

标签: asp.net-mvc-3 ninject multi-tenant petapoco

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

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

当然,好处是它不需要手动添加过滤器,从而减少了遗漏的可能性。我确实找到了一个example using NHibernate,我怀疑它可以改变用途。我正在使用Ninject以防万一。

1 个答案:

答案 0 :(得分:0)

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

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