В событии BeginRequest Global.asax вы можете сохранить его в HttpContext.Current.Items, что-то вроде «состояния сеанса» для отдельного запроса. Каждый запрос получает собственный контекст, поэтому нет проблем с потоками, если вы сохраняете новый DataContext для каждого запроса.
Вы можете использовать его в событии EndRequest.
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx
Однако это не будет хорошо масштабироваться, если вы собираетесь создавать DataContext при каждом запросе, даже если он не используется. Вместо этого вы можете создать статический метод, который выполняет отложенную инициализацию.
(Извините, набираю этот код на iPhone ... Я знаю ...)
private static MyDataContext GetDataContext() {
var dc = HttpContext.Current.Items["dc"] as MyDataContext;
if (dc==null) {
dc = new MyDataContext();
HttpContext.Current.Items.Add("dc", dc);
}
return dc;
}