Should the LINQ datacontext be stored in request.items for web apps?
No, IMO. In particular, I'm quite a purest, so I don't think my UI should have anything to do with the data access. That is the job of a repository class. An a repository class should likewise have nothing to do with the http-request.
So by separation-of-concerns, the only logical answer here is "no".
Re being expensive (comments); it actually gains cost the longer you use it:
- the object/identity tracker will slowly accumulate each unique record you fetch
- the change tracker has more work to monitor
- you get a lot more chance of stale (out-of-date) records (getting wrong data is a definite cost)
And by allowing it to live beyond the DAL, you also have to worry about threading (this is especially true for web-requests, where you can get all sorts of interesting combinations of requests for the same session).
LINQ-to-SQL doesn't offer much cache; it has limited support to short-circuit identity lookups to the identity manager (so if you ask for Single(x=>x.Id == 12345)
, and it has seen record 12345
, it won't hit the database). However, most of the time it'll hit the database. And re the database, one of the bigger costs there is the cost of new connections; which is mitigated very effectively (for web apps) by the connection pooling on SqlConnection
.