0
Link

:Почему репозитории, реализованные с использованием EF, выставляют IQueryable, а не ObjectQuery?

Мои хранилищами всегда возвращает IQueryable. Причиной этого является то, что IQueryable не зависит от EF, тогда как ObjectQuery. Так что если я хочу , то мои другие слои должны быть невежественными, я не хочу вводить зависимости от ObjectQuery.

а) Я предполагаю, что причину, почему хранилища (реализованный с использованием EF) должны возвращать IQueryable вместо ObjectQuery потому, что другие OR также использовать запросы, которые возвращают IQueryable, и при наличии хранилищ возврата IQueryable мы можем легко переключаться между EF и другими ORMs , без необходимости изменять открытый интерфейс репозитория?

b) Помимо EF и NHibernate, существуют ли какие-либо другие ORM, у которых также есть запросы, которые возвращают IQueryable?

Спасибо

+0

a) Да b) Список .AsQueryable() может использоваться также для тестирования. Существует также OData (но он поддерживает только крошечное подмножество IQueryable). – Aron

+0

Благодарим вас за ответ – bckpwrld

+1

Звонок по телефону: http://blog.ploeh.dk/2012/03/26/IQueryableTisTightCoupling/ –

ответ

0

Вы должны вернуть IQueryable, потому что это лингва франка дерев выражений. Если это не IQueryable, это либо какая-то другая вещь, которая понимает выражение, либо какой-то ужасный пользовательский язык, который дает вам очень плохой опыт программирования до

var resultsINeed = getQueryable(). Где (выражение1) .Выбрать (выражение2);

И если он понимает пример Expression здесь, то это могло бы также быть просто IQueryable, потому что вся точка из IQueryable - быть, что общая абстракция, что каждый может повторно использовать в своих интерфейсах.