Как организовать репозиторий моделей при использовании Entity Framework? - PullRequest
1 голос
/ 11 сентября 2009

У меня возникла дилемма о том, как организовать соединение (класс репозитория) со слоем данных в моем приложении, использующем Entity Framework.

Как бы вы это написали? А почему?

public class ResearchRepository
{
    public Research GetResearch (int id)
    {
        using (MnijenjeEntities mnijenjeContext = new MnijenjeEntities())
        {
            ObjectQuery<Research> researchs = mnijenjeContext.Research;

            var research = (from r in researchs.Include("SurveyPaper")
                            where r.ResearchID == id
                            select r).First();
            return research;
        }
    } //....

OR

public class ResearchRepository
{
    private MnijenjeEntities mnijenjeContext;

    public Research GetResearch(int id)
    {
         mnijenjeContext = new MnijenjeEntities();

         ObjectQuery<Research> researchs = mnijenjeContext.Research;

         var research = (from r in researchs.Include("SurveyPaper")
                         where r.ResearchID == id
                         select r).First();
         return research;
    } //....

Разница заключается в использовании объекта dataContext.

1 Ответ

1 голос
/ 11 сентября 2009

Я использую более или менее последний метод, но я не уверен, что вы задаете правильный вопрос, точно. Реальный вопрос, я думаю, это «что такое единица работы?» Нам нужно рассмотреть некоторые основные факты:

  • Использование нескольких ObjectContexts для одной и той же операции значительно сложнее, чем использование одного ObjectContext в одной операции.
  • Хранение ObjectContext в течение длительного времени может потенциально занять много памяти и иметь другие нежелательные побочные эффекты.
  • ObjectContext сам по себе имеет некоторые функции «облегченной транзакции», а именно то, что он накапливает изменения и может применить их все сразу, и что вы в какой-то степени изолированы от изменений в других контекстах.

Поэтому , я стараюсь использовать один ObjectContext на единицу работы и распоряжаться контекстом, когда единица работы завершена. Поскольку единица работы может потенциально включать несколько репозиториев, я создаю экземпляр класса Service, который создает ObjectContext, также может возвращать репозитории. Когда я спрашиваю службу о хранилище, она вставляет ObjectContext перед возвратом нового экземпляра. Утилизация службы удаляет контекст и все репозитории одновременно.

Я использую один экземпляр службы на единицу работы. В моем случае я делаю ASP.NET MVC, поэтому единица работы - это ответ на один запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...