Как правильно созвать контекст EF в конроллере asp.net?
Всем добрый день!
Правильно - создавать трехслойную архитектуру
Открывать контекст EF в методе действия контроллера - плохая практика. Плохая потому что:
1. это не соответствует трехуровневой архитектуре, а следовательно, значительно усложняет внесение изменений, масштабирование и сопровождение приложения;
2. это сразу показывает низкий уровень понимания шаблона MVC - могут даже на работу не взять;
3. EF - это модель. А контроллер по сути своей должен лишь получить данные (модель) и передать их в представление. То, каким образом формируются данные (EF, NHibernate, XML, Files, ...) - контроллер не должно волновать. Он лишь организовывает данные, чтобы передать их в представление. Часто модель разделяют на непосредственно модель и модель представления (аналог шаблона MVVM). Контроллер получает данные (модель), из них формирует модель представления и её передает в само представление. Зачем это надо - уже другой вопрос.
Далее - позволю себе не согласиться с инициализацией контекста EF на весь контроллер - можно, конечно, но это, опять-таки, плохая практика, потому что:
1. возникнут проблемы с использованием многопоточности и параллельных вычислений при работе с контекстом (библиотека TPL);
2. возникнет проблема "устаревания" данных - т.к. контекст создан на контроллер, то придется постоянно его обновлять;
3. это, опять же, показывает уровень и опыт разработчика, а следовательно, снижаются шансы при трудоустройстве (туда, где я сейчас работаю - точно не взяли бы программистов, которые практикуют формирование модели в контроллере или которые инициализируют контекст в контроллере или при запросе).
Итог: контекст EF должен существовать как можно меньшее время - ровно столько, чтобы получить данные, обработать их, сформировать из них, например, другие объекты (обертки, модели, модели представлений).
Читайте книгу "ASP.NET MVC 3/4/... Framework с примерами на C# для профессионалов" Адама Фримена и Стивена Сандерсона - там, можно сказать, приведены best practices по разработке в ASP.NET MVC с использованием EF.
А вообще - всё зависит от задачи/проекта. Если это какой-нибудь учебный проект или ооооочень простое приложение - то можно для упрощения контекст инициализировать и в методе действия (контекст на метод действия), и при запросе (контекст на контроллер). Однако если Вы хотите повышать свой профессиональный уровень и заниматься enterprise-приложениями, то опытным путем Вы выясните, что самый лучший способ - это инициализация контекста на конкретную задачу.
Удачи!
P.S. Ничего плохого не имею против хабра (сам частенько читаю), но хабр - это не учебник, а источник разрозненной, но полезной информации. А Вам сейчас, судя по всему, нужна теория Структурированная теория. Найдите время и изучите "мат.часть". Поверьте, большинство вопросов по разработке на ASP.NET MVC у Вас просто отпадет.
Ничего ужасного тут нет, вполне допустимо.