2009-02-15 3 views
3

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

Спасибо, Lucian

ответ

2

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

+0

Если я закрою DataContext, как мне привязать объекты к контексту? Во время выполнения я получаю много ошибок. Или LINQ не подходит для такого рода сценариев? – lmsasu

+0

@unknown - DataContext.Attach() –

+0

иногда он работает, иногда он сбой ... – lmsasu

1

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

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

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

2

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

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

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

соединения, если DataContext построен с объекта соединения.

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


из MSDN LINQ to SQL FAQ

1

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

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