«Внедрение» предложения WHERE динамически с PetaPoco - PullRequest
1 голос
/ 04 октября 2011

Я создаю мультитенантное приложение с общей базой данных, используя .NET MVC 3 и PetaPoco. Идентификатор клиента (вместе с другой информацией) сохраняется в файле cookie FormsAuth при входе в систему и доступен всем контроллерам через свойство BaseController. Большинство таблиц (т.е. кроме основной таблицы «Арендаторы») содержат столбец TenantId.

Вместо того, чтобы вручную добавлять 'WHERE TenantId = X' ко всем CRUD в таблицах объектов, есть ли способ, которым я могу динамически добавить это в запрос непосредственно перед его выполнением? Другими словами, возможно, ведите список таблиц, и если запрос относится к одной из этих таблиц, то динамически добавьте в фильтр TenantId?

Преимущество, конечно, состоит в том, что он устраняет необходимость добавлять фильтр вручную, тем самым уменьшая вероятность его исключения. Я нашел пример с использованием NHibernate , который, я сомневаюсь, можно использовать повторно. Я использую Ninject в случае, если это имеет значение.

1 Ответ

0 голосов
/ 04 октября 2011

В классе Database есть метод OnCommandExecuting, который вы можете переопределить в своем собственном подклассе и изменить sql по своему желанию непосредственно перед его выполнением. Мы используем эту функцию для преобразования isnull / nvl между Sql Server и Oracle.

Вы можете просто оставить маркер в вашем sql и заменить его здесь.

...