ASP.NET MVC2 с Entity Framework 4 - AsEnumerable () или ToList () в хранилище? - PullRequest
15 голосов
/ 23 сентября 2010

Так что мне несколько раз советовали отключить отложенную загрузку при создании приложения с вышеупомянутыми платформами, и что ToList () заставит выполнять запросы в моем репозитории. Мне сказали, что я бы избежал определенных «ловушек», с которыми я мог бы столкнуться, если бы использовал AsEnumerable ().

Однако по недавнему вопросу я включил в свои примеры кода кучу ToList () и поразил многих людей, которые заверили меня, что IEnumerable гораздо лучше вернуть.

Сейчас я полностью сбит с толку, если не сказать больше.

Должен ли я возвращать IEnumerable в моем хранилище, а затем преобразовывать их в List в моделях представления? Должен ли я сразу использовать ToList () в своем хранилище, как раньше? Я должен был оставить отложенное выполнение включенным в первую очередь?

Jiminy Рождество ...

Edit: Итак, если я отключил отложенную загрузку, основываясь на предыдущих советах, должен ли я снова включить его, вернуть IEnumerable / IQueryable из моего репозитория и преобразовать коллекцию в список в моих моделях представления, если это необходимо?

Один из приведенных ниже ответов связывает IEnumerable с нетерпеливым выполнением, в то время как у меня сложилось впечатление, что только ToList () вызовет немедленное выполнение запроса.

Я наткнулся на это , это и это , которые содержат некоторые интересные обсуждения, связанные с этим вопросом.

1 Ответ

16 голосов
/ 23 сентября 2010

Вызовите ToList(), возвращая IEnumerable в вашем хранилище, если:

  1. Вы хотите контролировать выходной набор, предоставленный потребителю (т.е. вы не хотите, чтобы он выполнял запросына него) и
  2. Вы не возражаете против нетерпеливого исполнения.

Возврат IQueryable или IEnumerable через AsEnumerable() в вашем хранилище, если:

  1. Вы не возражаете против того, чтобы ваши потребители выполняли запросы на выходном наборе, и
  2. Вы хотите отложенное выполнение.

См. Также
http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case

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