Базовый контекст репозитория Entity Framework - PullRequest
0 голосов
/ 22 сентября 2010

Я создаю приложение ASP.NET 4.0 MVC 2 с общим репозиторием на основе этого сообщения в блоге .

Я не уверен, что делать с временем жизни ObjectContext - вот типичный метод из моего класса репозитория:

public T GetSingle<T>(Func<T, bool> predicate) where T : class
{
    using (MyDbEntities dbEntities = new MyDbEntities())
    {
        return dbEntities.CreateObjectSet<T>().Single(predicate);
    }
}

MyDbEntities - это ObjectContext, созданный Entity Framework 4.

  1. Можно ли вызывать .CreateObjectSet() и создавать / распоряжаться MyDbEntities для каждого HTTP-запроса? Если нет, как я могу сохранить этот объект?
  2. Если другой метод возвращает IEnumerable<MyObject> с использованием аналогичного кода, вызовет ли это неопределенное поведение, если я попытаюсь выполнить операции CRUD вне области действия этого метода?

1 Ответ

4 голосов
/ 22 сентября 2010

Да, можно создавать новый контекст объекта для каждого запроса (и, в свою очередь, вызывать CreateObjectSet).На самом деле, это предпочтительнее.И, как и любой объект, который реализует IDisposable, вы должны быть хорошим гражданином и распоряжаться им (что и делает ваш код выше).Некоторые люди используют IoC для управления временем жизни своего контекста объекта, ограниченного запросом http, но в любом случае он недолговечен.

Во второй части вашего вопроса, я думаю, вы спрашиваете, выполняет ли другой методОперация CRUD с другим экземпляром контекста данных (дайте мне знать, если я неправильно интерпретирую).Если это так, вам нужно присоединить его к новому контексту данных, который будет выполнять фактическое обновление базы данных.Это хорошая вещь, чтобы сделать.Также приемлемо использование шаблона «Единица работы».

...