2010-01-05 2 views
3

Например, у меня есть 2 метода, которые используют один DataContext (Linq to sql).Есть ли причина использовать один экземпляр DataContext вместо нескольких?

using(DataContext data = new DataContext){ 
    // doing something 
    another_datamethod(data); 
} 

void another_datamethod(DataContext data){ 
    // doing 
} 

Использовать этот стиль? Или с тем же результатом, я могу создать отдельный «использование DataContext». Какие преимущества я получу, если я буду использовать один DataContext? Может быть, некоторые возможности кеша?

ответ

-1

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

0

Недавно я прочитал многочисленные статьи и блоги, которые «очень рекомендую», что вы используете несколько DataContext для своих приложений из-за множества проблем, включая создание записей, связанных с таблицами поиска. Когда я изучал LINQ-to-SQL, одним из наиболее привлекательных качеств для меня было возможность импортировать мою полную схему базы данных в один «большой» DataContext. Итак, это то, что я сделал ... но через несколько месяцев появляется противоречивая информация о том, что то, что я сделал, было плохо. Что делать, что делать ...

Девять месяцев спустя, вот где я стою. Мой единственный большой DataContext: еще мой единственный большой DataContext. У меня есть более тридцати классов хранилищ данных, обращающихся к шестидесятизначным таблицам, содержащимся внутри, и я до сих пор не вижу действительной причины для разложения моего существующего data-dom или не обрабатывать следующий проект с использованием одного DataContext. Проблемы, которые испытывали статьи и блогеры, были актуальными проблемами. Однако, как и большинство технических вещей, никогда не существует только одного способа сделать что-то. Лучшая инвестиция моего времени и энергии заключалась в том, чтобы узнать и по-настоящему понять, как LINQ-to-SQL делает то, что он делает. Лучшая книга, которую я нашел, чтобы помочь мне сделать именно это Pro LINQ: Language Integrated Query in C# 2008 от Джозефа К. Ратца младшего. Покрытие LINQ-to-SQL детально и понятно, и есть много примеров, чтобы прояснить тайну.

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

+0

Я здесь говорю не о большом или маленьком. Мой вопрос: один экземпляр во всех методах стека или много экземпляров по одному в каждом методе. –

+1

Извините за путаницу ... Если вы хотите выполнить несколько методов для одного и того же DataContext, вы определенно захотите использовать блок using. Передача в DataContext в качестве аргумента с использованием вашего примера требует, чтобы объект был инициализирован локально для каждого вызова метода. Вы можете выбрать один глобальный DC в качестве объекта singleton, но это может создать проблемы параллелизма, если мета-объекты не будут очищены после использования. Используемый блок гарантирует, что экземпляр DC будет удален после использования. Я бы пошел с этим ... –

Смежные вопросы