2012-04-25 6 views
0

У меня есть несколько действий в моих контроллерах, которые возвращают IEnumerable из объектов EF.ASP.NET MVC, EF: вернуть методы действий Список вместо IEnumerable

Я думал о том, чтобы заставить эти actionmethods возвращать список вместо этого (просто вызывая model.ToList(), прежде чем передавать его обратно в представление).

Есть две причины, почему я думаю, что делать:

  • Во-первых, я измерения производительности каждого из actionmethods в классе BaseController (onactionexecuted/onactionexecuting) и если я вернусь IEnumerable, тогда запрос не выполняется до тех пор, пока не будет обработан onaction.
  • Во-вторых, я планировал использовать соединения, используемые моим «слоем услуг» внутри OnActionExecuted, однако, если я их там размещаю, представления не позволяют bc моделей не получать.

Мой вопрос: есть ли какие-либо недостатки в этом? Я уверен, что всякая IEnumerable Model будет пройдена полностью, поэтому не будет проблемы с извлечением данных, которые не будут использоваться.

Благодарим за помощь.

+0

Вы должны убедиться, что ваши запросы материализованы (выполнены) перед передачей данных на ваш взгляд. Вызов 'ToList()' является одним из способов сделать это. –

ответ

2

Это действительно правильная вещь для ИМО. Вы в значительной степени уже указывали на плюсы и минусы. Основное различие заключается в том, что .ToList загружается в память сразу, а другой позволяет загружать по требованию.

Если вы все равно планируете загружать все перечисления, то вызов .ToList позволит вам сэкономить вам пропускную способность, запросив все в одном захвате вместо одного. Так что, если что-нибудь звучит, похоже, это лучший путь.

+0

С предположением, что List будет возвращен после подкачки, поэтому каждая часть <100 элементов, которые будут работать нормально. – st78