Здесь есть много чего рассказать - я дам вам свое представление в горшке, а затем дам вам несколько ссылок и т. Д., Чтобы помочь вам в дальнейшем.
Однако на этом сайте есть много других похожих вопросов - так что сделайте поиск, и вы найдете больше.
Пожизненная
Вы не нуждаетесь в , чтобы использовать оператор using
с Linq-To-Sql DataContext, но вы должны утилизировать его, когда вы сделанный. Поэтому использование блока является лучшим способом из-за его семантики try ... finally {}. Так что, на мой взгляд, вы должны использовать using
блок.
Вы должны не держать контексты данных linq to sql открытыми в течение длительных периодов времени из-за отслеживания изменений, которое происходит в каждом объекте, который открывается контекстом - это ухудшает производительность и может привести к непредвиденным поведение.
Sql Connection, насколько я знаю, открывается при создании контекста и закрывается при его удалении.
Поэтому вы должны открыть контекст linq to sql, когда вы хотите выбрать, вставить, обновить или удалить данные, а затем закрыть их, как только вы закончите. Например, нормально вставлять 100 записей через один и тот же DC; как обновление или удаление. Однако я, вероятно, не выбрал бы несколько тысяч записей одного типа, обновил бы несколько тысяч другого, а затем удалил бы еще несколько других в одном контексте - главным образом из соображений производительности.
Связанные данные
Если у вас есть связанные данные - то есть Таблица A -> Таблица B, то знайте, что по умолчанию для DataContext (DC) используется отложенная загрузка связанной строки в B при доступе из дочернего свойства на A. Следовательно, если вы намереваетесь передать обратно один из ваших linq классам, сгенерированным sql, вне кода, который создает и удаляет DC, который используется для выбора, вы можете получить ObjectDisposedException
s брошенным.
Чтобы избежать этого - вы можете использовать DataLoadOptions.LoadWith <> и DataLoadOptions.AssociateWith <>, чтобы смягчить это также - что вызывает предварительную выборку связанных строк, когда выбрана одна строка. Это может увеличить объем данных, которые ваши запросы Linq To Sql читают из базы данных, поэтому вы не обычно всегда применяете предварительные выборки всех связанных записей для всех запросов - только на те, которые, как вы знаете, потребуют их.
Извините, я не даю примеры кода или что-то еще - в одном ответе есть что рассказать, но вот несколько ссылок:
Рик Страл говорит о временах жизни Linq To Sql DC
Динеш из Microsoft говорит о том же
Скотт Гатри - 9 часть Linq to SQL Series - это ссылка на поиск по его блогу - прокрутите вниз и пролистайте, и вы найдете все различные части, начиная с часть 1 еще в мае 2007 года.