There are a couple of questions here:
Firstly, regarding your performance issues. Are you sure that ISessionFactory is created only once? This is a very expensive object to create, so it should probably be a singleton in your web application created on Application_Start and not in Application_BeginRequest. My guess about why you get such poor performance is that you create a new ISessionFactory for each request, and not once for the entire application.
Secondly, with regard to implicit transactions, they are not so bad, but because of how you describe your code, you should not get these errors. Are you sure you are making your calls within a transaction? You may be gaining access to some lazy loading properties from .aspx and .ascx pages that may run outside of your transaction.
Kevin pang
source share