Я использую LINQ to SQL в библиотеке объектов доступа к данным. Библиотека используется как в веб-интерфейсе (веб-приложение/веб-сервис), так и в контексте, не относящемся к сети (служба Windows). Первоначально я сохранял DataContext в текущем HttpContext, так как он позволял мне управлять довольно небольшой единицей работы (один веб-запрос) и избегать глобальных объектов в веб-приложении. Очевидно, что это не работает в службе Windows.
Rick Strahl имеет хорошую статью об управлении временем жизни DataContext: http://www.west-wind.com/weblog/posts/246222.aspx. К сожалению, я не могу решиться на лучший подход. Глобальный DataContext не работает по причинам, о которых он упоминает, per-Thread DataContext кажется сложным и потенциально большим количеством проблем, чем это стоит, и экземпляр для каждого объекта кажется суетливым - вы теряете некоторую элегантность, когда вы присоединяете DataContext, используемый для создания DAO для этого DAO, чтобы он мог update или delete позже - не говоря уже о том, что что-то неприятное в отношении отношений с цыпленком и яйцом.
Есть ли у кого-нибудь личный опыт, который предполагает, что один подход лучше другого? Или еще лучше, есть ли у кого четвертый или пятый подход, который я не вижу? Где лучше всего хранить и управлять вашим DataContext?