Можно ли использовать шаблон репозитория + хранимые процедуры? Должны ли они / могут вернуть IQueryable? - PullRequest
3 голосов
/ 02 августа 2010

Я большой поклонник использования Repository pattern для возврата IQueryable<T> объектов. Затем я позволяю своему сервисному слою определить, что и что делает (например, фильтр по XXX, порядок по YYY, проект в ABCD и т. Д.).

Но у меня есть кое-что хардкорное в БД, поэтому я все это завернул в Stored Procedure. Работает отлично. Я знаю, что EF может выполнять хранимые процессы ... но я не уверен, как это вписывается в слой данных шаблона репозитория.

У кого-нибудь есть примеры / предложения ? Позволить ли методу хранилища выполнить хранимую процедуру, а затем я верну результат (например, ICollection<Foo> as AsQueryable .. так что сервисный уровень просто запросит этот результат?

1 Ответ

2 голосов
/ 02 августа 2010

Я бы предложил пойти дальше и сделать именно это. Настройте хранимую процедуру в модели EF, возвращая ту сущность, в которой она нуждается, затем в своем хранилище создайте get, который обращается к тому, что использует хранимая процедура. Разница в том, как возвращаются данные, возникает внутри вашего DAL (в данном случае модели EF), ваш репозиторий по-прежнему имеет доступ к контексту для поиска и возврата данных.

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

...