The With.* set of classes has a single thing in common, they take a delegate and add functionality but handling pre/post and exceptional behavior.
Edit With.Transaction
Will use the UnitOfWork to start a transaction, and automatically commit it if it was successful, or rollback if it failed.
The usage is simply:
With.Transaction(delegate{
Repository.Save(new Post("abc","foo"));
});
The main advantage here is, of course, the automatic rollback/commit.
Edit With.Caching
This offers several methods that integrate into NHibernate query caching capabilities, and allow to cache all queries that are run until it is disposed delegate:
using(With.QueryCache())
{
return Repository.FindAll(Where.Customer.Important == true);
}
Edit With.PerformanceCounter
Allows you to very accurately time the length of time an operation took:
double duration = With.PerformanceCounter(delegate{
DoSomething();
});
And now you can use the duration to do whatever you want, it is using the Windows performance counters, so it is very accurate.