DataContext является довольно легким классом и предназначен для использования в качестве единицы работы. Обычно я передаю Factory, которая при необходимости создаст соответствующий DataContext. Обычно я оборачиваю это в блок using и преобразую результаты в List (или другой объект), чтобы запрос выполнялся в коде контроллера, а полученные объекты передавались в мое представление. Таким образом, DataContext может быть удален (из блока using) в методе контроллера.
Причина, по которой фабрика вводит фабрику в контроллер, двояка: она позволяет создавать DataContext по требованию и позволяет использовать фабрику, которая генерирует фиктивный DataContext для тестирования. Последнее позволяет мне избежать использования реальной базы данных в моих модульных тестах.