Хотите знать о контексте в веб-сайте MVC3 / EF1 CodeFirst - PullRequest
1 голос
/ 02 ноября 2011

Я создал простой контекст CodeFirst (Entity Framework 4.1), а затем, используя правую кнопку мыши в папке контроллера, сказал: «Добавить контроллер», «Entity Framework», выбрал одну из моих простых сущностей codefirst, которые я создал, и связанные с нимиконтекст.Код контроллера, который он генерировал, выглядит следующим образом.

Что меня смущает, так это то, почему Context создается как частный объект в классе Controller.Я бы подумал, что его следует создать с помощью using (), чтобы в конце метода его можно было правильно расположить.

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

Спасибо

namespace Web.Controllers
{ 
    public class TaskInfoController : Controller
    {
        private TaskContext db = new TaskContext();

        //
        // GET: /TaskInfo/

        public ViewResult Index()
        {
            var taskinfos = db.TaskInfos.Include(t => t.TaskGroup);
            return View(taskinfos.ToList());
        }

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Ну, это допускает атомные коммиты, но я согласен, это не правильный путь. Я использую шаблон Repository / Service / UnitOfWork с MVC3 и EF, и он отлично работает. Ищите так, есть тонна информации об этом. А пока переместите его в оператор using внутри действия контроллера.

1 голос
/ 02 ноября 2011

Вы правы, что контексты должны быть расположены.Любой IDisposable должен быть утилизирован.

Controller реализует IDisposable, поэтому вы можете просто переопределить Controller.Dispose(bool) и утилизировать его там.

Однако это действительноОбычно используется DI для вставки экземпляра контекста (или чего-то, что оборачивает его, например, хранилище) в качестве параметра конструктора.В этом случае вы запрашиваете экземпляр области, используя функции вашего DI-контейнера.Например, прочитайте Внедрение зависимостей в .NET , автор Mark Seeman.

...