Недавно я прочитал многочисленные статьи и блоги, которые «очень рекомендую», что вы используете несколько 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 или создайте много меньших ... выбор зависит от вас. Более мелкие явно дают лучшую возможность повторного использования, в то время как один большой помогает увеличить время, которое вы можете сосредоточить на бизнес-логике и коде представления.
Я здесь говорю не о большом или маленьком. Мой вопрос: один экземпляр во всех методах стека или много экземпляров по одному в каждом методе. –
Извините за путаницу ... Если вы хотите выполнить несколько методов для одного и того же DataContext, вы определенно захотите использовать блок using. Передача в DataContext в качестве аргумента с использованием вашего примера требует, чтобы объект был инициализирован локально для каждого вызова метода. Вы можете выбрать один глобальный DC в качестве объекта singleton, но это может создать проблемы параллелизма, если мета-объекты не будут очищены после использования. Используемый блок гарантирует, что экземпляр DC будет удален после использования. Я бы пошел с этим ... –