First of all, I’d like to remind that even if onionarch.codeplex is a very very good starting point for everyone that wants to get into Onion architecture (everything is pretty straightforward), mentioning it as a source for thinking is ok, but the intention of Matt Hidinger was surely not to provide with any production code here.
That said, IMHO the decision depends on several parameters.
Do you work alone or in a large team? Are all the developers involved, pretty good ones? Do you have DBAs? Do you care about performances?
I’m working in a company with a lot of different developers. Our sites are hit tons of time a minute, our web applications are accessing a pretty huge DB which is closely monitored by a strong DBA team. If I let developers create their own queries towards the DB, I’m not sure that everyone will activate a profiler to see if the generated T-SQL is ok or not. It would be impossible to control every single Linq2Entities query. This would lead to performance issues and DBA’s heart attacks :-) (Of course caching would help out, but it doesn’t solve everything).
So, as @DarinDimitrov said, both approaches are correct, but from my side I prefer not letting consumer plays directly with IDataContext.