Мультитенантная реализация EF с хранимыми процедурами - PullRequest
0 голосов
/ 22 апреля 2011

Когда я использую SProcs в EF4, я понимаю концепцию отображения видов на сущности, а затем использую функцию импорта для сопоставления моего набора / обновления / удаления с sprocs. У меня вопрос, как это относится к мультитенантной архитектуре. Рассмотрим следующий сценарий:

У нас есть несколько сотен клиентов, использующих нашу мультитенантную базу данных / приложение. У каждого клиента есть где-то между 50-200 Счета в таблице Счетов. Если я открываю представление для EF, я не могу параметризовать это представление. Итак, следующая строка:

query = (from e in context.Accounts select e).where(e => e.companyID = 1)
[forgive me if I'm syntactically incorrect. still learning EF!]

, по определению, сначала нужно будет вернуть все Учетные записи, а затем отфильтровать, используя мое условие износа. это правильно? Я не могу представить, как еще будет работать этот процесс.

Я что-то здесь упускаю?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

В этом разница между Linq-To-Objects и Linq-To-Entities. Linq-To-Objects работает с IEnumerable<T>, и вы передаете делегаты его методам, чтобы определить запрос, который будет выполнен в памяти. Linq-To-Entities работает на IQueryable<T>, и вы передаете выражения его методам, определяя дерево выражений, которое преобразовывается поставщиком Linq-to-entity в другой синтаксис - в SQL!

Таким образом, ваш запрос будет выполнен в базе данных, а фильтрация будет выполнена и в базе данных. Помните, что после выполнения таких команд, как AsEnumerable, ToArray, ToDictionary или ToList, вы преобразуете остальную часть запроса в Linq-to-objects.

Если вы пишете запрос о результате выполнения хранимой процедуры, вы всегда выполняете только запросы Linq-to-objects, а запросы ObjectSets напрямую формируют запросы Linq-to-entity.

2 голосов
/ 22 апреля 2011

EF не должен сначала возвращать все учетные записи, а затем фильтровать.Скорее, он должен отправлять запрос с предложением WHERE.

Вы можете проверить с помощью SQL Profiler, чтобы быть уверенным на 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...