Несколько/единственных инстанцируют Linq к SQL DataContext

Используйте следующий код для копирования значений:

c := make([]*T, len(s))
for i, p := range s {

    if p == nil {
        // Skip to next for nil source pointer
        continue
    }

    // Create shallow copy of source element
    v := *p

    // Assign address of copy to destination.
    c[i] = &v
}

Запустите его на детской площадке .

Этот код создает поверхностную копию значения. В зависимости от требований приложения может потребоваться глубокое копирование значения или, если это тип структуры, одного или нескольких полей. Особенности зависят от фактического типа T и требований к применению.

32
задан spender 22 October 2008 в 15:00
поделиться

5 ответов

У Rick Strahl есть хорошая статья о Ваших опциях: http://www.west-wind.com/weblog/posts/246222.aspx .

См. также: LINQ к SQL - где Ваш DataContext живет? .

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

Итоговый, Ваши опции:

  • Глобальный DataContext - опасный в многопоточных средах (включая веб-приложения). Помните, что члены экземпляра, как гарантируют, не будут ориентированы на многопотоковое исполнение (от Bradley Grainger ответ выше).
  • DataContext на поток - сложный. Если Ваш DataContext отслеживает изменения, несомненно, необходимо будет сбросить их в подходящее время. Инстанцирование, храня и получая DataContext является болью.
  • DataContext на атомарное действие - Вы теряете способность отследить изменения, так как один DataContext создает объект, в то время как другой обновляет или удаляет его. Присоединение объекта данных к новому DataContext не может работать как Вы, ожидают.
  • DataContext на объект данных - кажется неэлегантным, потому что необходимо носиться с DataContext на инстанцировании (создайте и присоедините), и обновите/удалите (вытяните его от объекта данных и используйте его).

я выбрал DataContext на объект данных. Это не может быть самое необычное решение, но это работает во всех средах развертывания.

33
ответ дан 27 November 2019 в 20:51
поделиться

Класс DataContext достаточно легок, что можно инстанцировать его много раз. Это делает вещь более простой при доступе к объектам объекта в отдельном методе. Если необходимо получить доступ к тем же объектам LINQ от различных классов и методов при сохранении их присоединенными к DataContext для отслеживания целей, это должно также хорошо сохранить единственный экземпляр.

8
ответ дан 27 November 2019 в 20:51
поделиться

Я использую новый экземпляр DataContext для каждой транзакции.

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

при необходимости в объекте дольше, чем для транзакции Вы можете отсоединить его от DataContext путем клонирования объекта и можете повторно прикрепить его позже к новому и новому DataContext с помощью Присоединения ().
я даже могу клонировать объект, отправить его по сети с WCF, вернуть его в некотором более позднем вызове, присоединить его к новому DataContext и сохранить изменения (конечно, мне нужен столбец метки времени для этого).

9
ответ дан 27 November 2019 в 20:51
поделиться

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

Вот почему я использую объект контекста данных для каждого из моих классов - мой User, класс имеет свой собственный контекст данных, мой Application, класс имеет свой собственный и т.д.

Этот шаблон устраняет большинство проблем сделать откаты в моих проектах.

3
ответ дан 27 November 2019 в 20:51
поделиться

Я всегда слышал, что необходимо использовать единственный экземпляр DataContext. Я обычно создаю одноэлементный экземпляр своего DC в моем классе бизнес-логики и использую его для всех моих запросов linq.

я уверен, что некоторые linq гуру на здесь смогли приводить Вам точные причины относительно того, почему Вы должны только иметь на экземпляре Вашего класса контекста данных... Я не совсем уверен.

-3
ответ дан 27 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: