Могу ли я использовать вложенные DataContexts в Linq TO Sql? - PullRequest
0 голосов
/ 29 августа 2009

Приведет ли создание другого текста данных в методе GetData3 () к проблемам?

  public void SetoFDataMethods()
  {
    using (DataContext DC= new DataContext())
    {

        var d1=DC.GetData1();
        var d2=DC.GetData2();
        var d3=DC.GetData3();

        display(d3);

    }
  }


  public result GetData3()
   {
        If (conditionA)
        {
               using (DataContext newContext=new DataContext())
               {
                    var result= newContext.GetData4();
                   return result;
               }
        }        
   }

Ответы [ 4 ]

3 голосов
/ 29 августа 2009

Нет, я не думаю, что это обязательно создаст проблемы, но это может создать путаницу. Каждый контекст будет независимым и не будет делиться транзакциями, если вы явно не закодируете это. Я делаю нечто подобное, когда использую несколько контекстов данных, один для аудита, а другой для фактических данных, но они являются отдельными и даже не отображаются те же таблицы.

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

Одним из преимуществ продвижения контекста является то, что вы можете легко внедрить фиктивный контекст, если вам нужно для модульного тестирования. Создание контекста данных внутри вашего метода усложнит модульное тестирование, поскольку у вас нет простого способа изолировать его от вашей реальной базы данных. Я разместил в блоге запись о том, чтобы издеваться / подделывать контекст данных LINQ с помощью обертки некоторое время назад, что может быть полезно, если вы пойдете по этому пути.

1 голос
/ 29 августа 2009

Не легко по умолчанию. Вам придется отделить сущности, связанные с контекстом, чтобы использовать их в другом контексте данных. Простым решением этой проблемы было бы создание шаблона «Единица работы».

1 голос
/ 29 августа 2009

Я бы посоветовал вам отправить DataContext в качестве параметра и использовать тот же DataContext.

1 голос
/ 29 августа 2009

Имейте в виду, что объекты, извлеченные из одного контекста, привязаны к этому контексту, если только вы не совершите какое-то явное волшебство противного. В настоящее время попытка, скажем, удалить объект из контекста, отличного от того, из которого он был извлечен, вызовет исключение.

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