Должен ли контекст LINQ быть закрыт каждый раз? - PullRequest
3 голосов
/ 15 февраля 2009

В LINQ to SQL необходимо ли закрывать контекст после выполнения выбора в базе данных (и, конечно, после использования данных)? если я оставлю его открытым, значит ли это, что соединение с сервером остается открытым?

Спасибо, Lucian

Ответы [ 4 ]

2 голосов
/ 15 февраля 2009

Q. Как долго мое соединение с базой данных остается открытым?

A. Соединение обычно остается открытым, пока вы не используете результаты запроса. Если вы ожидаете, что для обработки всех результатов потребуется время и вы не против кэширования результатов, примените ToList (TSource) к запросу. В распространенных сценариях, когда каждый объект обрабатывается только один раз, потоковая модель превосходит как DataReader, так и LINQ to SQL.

Точные детали использования соединения зависят от следующих факторов:

Состояние соединения, если DataContext создан с объектом соединения.

Настройки строки подключения (например, включение нескольких активных наборов результатов (MARS). Для получения дополнительной информации см. Несколько активных наборов результатов (MARS).


из FAQ по MSDN LINQ to SQL

2 голосов
/ 15 февраля 2009

Базовое соединение не закрывается и не удаляется до тех пор, пока вы не закроете DataContext, используя метод Dispose. Вы должны всегда вызывать Dispose после использования DataContext. Думайте о DataContext как о традиционном объекте Connection, то есть о том, что он более или менее скрыт.

1 голос
/ 15 февраля 2009

Короткий ответ: да, вы должны открывать текстовый текст только тогда, когда он необходим, и закрывать его как можно скорее. Если вы не избавитесь от него, базовое соединение с базой данных может остаться открытым.

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

1 голос
/ 15 февраля 2009

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

ASP.NET, к сожалению, не очень совместима с отслеживанием изменений сегодня, поэтому закрытие контекста после использования - лучший способ обработки структуры сущностей в asp.net. Если я пытаюсь оставить контекст открытым, у меня иногда возникают проблемы с обновлением сущностей. Я считаю, что в Linq должна быть та же проблема.

В приложении Windows Forms с базой данных на том же компьютере или в локальной сети я повторно использовал бы контекст объекта через фасад (меньше дублирования кода), чтобы иметь возможность воспользоваться отслеживанием изменений и прямым подключением к базе данных.

...