Я использую 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
?