Though Nhibernate shines on ORM world of .NET LINQ-To-SQL is faster when it comes to prototyping.
The big Mature Nhibernate has a solid session management code-base, also Burrow and Spring.Net have developed their own session management libraries for Nhibernate.
LINQ-To-SQL session management could be tricky especially with a state-less framework like ASP.NET so somehow you may find it better to create an instance every time you want to consume your database (Singleton pattern may not be the best answer here, please read Rick Strahl full article here) so basically the DataContext CRUD is all straight forward except the U part.
To Create an new entity you simply use the following code:
DbContext dbcontext = new DbContext(ConfigurationManager.ConnectionStrings[0].ConnectionString);
Request req = new Request();
req.Status = RequestStatus.PendingShipment;
req.UserId = Convert.ToInt32(signupUser.ProviderUserKey);
req.SubmittedOn = DateTime.Now;
dbcontext.Requests.InsertOnSubmit(req);
dbcontext.SubmitChanges();
dbcontext.Dispose();
to Delete a record :
DbContext dbcontext = new DbContext(ConfigurationManager.ConnectionStrings[0].ConnectionString);
Request req = dbcontext.Request.Single(r => r.id == requestId);
req.Status = RequestStatus.PendingShipment;
req.UserId = Convert.ToInt32(signupUser.ProviderUserKey);
req.SubmittedOn = DateTime.Now;
dbcontext.Requests.DeleteOnSubmit(req);
dbcontext.SubmitChanges();
dbcontext.Dispose();
and here comes the tricky Update:
DbContext dbContext = new DbContext(System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString);
dbContext.Requests.Attach(currentRequest);
dbContext.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, currentRequest);
dbContext.SubmitChanges();
dbContext.Dispose();
on updating your entities you don't need to reload the original entity of perform one-by-one property comparison, all you need is to Attach your entity and Refresh using KeepCurrentValues to keep unmodified items as is.

