[Reposting because it appears to have been deleted somehow.]
A bit ago, I posted some info on doing CRUD operations using LINQ: http://www.atrevido.net/blog/2007/08/26/A+LINQ+To+The+CRUD.aspx
This is a lightweight way (no codegen at all, only 2 lines of code per table) to get some CRUD stuff with LINQ. It's not the most efficient or fantastic way of doing things, but it works fine in the several projects we've used it so far. And we get to use C# 3's expression trees, which is a fantastic and under-exploited feature. At any rate, it does show that doing disconnected work with LINQ is trivial.
The code I posted was for Beta 2 and no longer works. I've since added a few new features, but the basic idea remains the same as before. I'm just posting the new code as I've gotten a few emails and one comment about the old code no longer working.
DatabaseBase.cs (10.47 KB)
While working on it in a real project, I started using our Tuple struct, so you'll need that too:Tuple.cs (2.8 KB)
As Scott Peterson pointed out, this class doesn't implement IEquatable<T>. Just add it and call the == operator.
As always I welcome any criticism.
Remember Me