Я создаю мультитенантное приложение с общей базой данных, используя .NET MVC 3 и PetaPoco.
Идентификатор клиента (вместе с другой информацией) сохраняется в файле cookie FormsAuth при входе в систему и доступен всем контроллерам через свойство BaseController. Большинство таблиц (т.е. кроме основной таблицы «Арендаторы») содержат столбец TenantId.
Вместо того, чтобы вручную добавлять 'WHERE TenantId = X' ко всем CRUD в таблицах объектов, есть ли способ, которым я могу динамически добавить это в запрос непосредственно перед его выполнением? Другими словами, возможно, ведите список таблиц, и если запрос относится к одной из этих таблиц, то динамически добавьте в фильтр TenantId?
Преимущество, конечно, состоит в том, что он устраняет необходимость добавлять фильтр вручную, тем самым уменьшая вероятность его исключения. Я нашел пример с использованием NHibernate , который, я сомневаюсь, можно использовать повторно. Я использую Ninject в случае, если это имеет значение.