我正在使用.NET MVC 3和PetaPoco构建一个带有共享数据库的多租户应用程序。 租户ID(以及其他信息)在登录时保存在FormsAuth cookie中,并通过BaseController属性提供给所有控制器。大多数表格(即除了主要的“租户”表之外)包括TenantId列。
有没有一种方法可以在执行之前将其动态添加到查询中,而不是手动将“WHERE TenantId = X”添加到功能表上的所有CRUD中?换句话说,可能维护一个表列表,如果查询是针对其中一个表,那么动态添加TenantId过滤器?
当然,好处是它不需要手动添加过滤器,从而减少了遗漏的可能性。我确实找到了一个example using NHibernate,我怀疑它可以改变用途。我正在使用Ninject以防万一。
答案 0 :(得分:0)
在Database类上有一个OnCommandExecuting方法,您可以在自己的子类中覆盖它,并在执行之前按照您的意愿修改它。我们使用此功能在Sql Server和Oracle之间转换isnull / nvl。
您可以在sql中留下一个标记并在此处替换它。