I am currently working on server application that has to deal with reasonable amount of clients over TCP in LAN. Tasks that server has to accomplish vary from trivial to mildly-complex, and most of them include some form of database interaction. I'd like to make database access asynchronous, since not all queries are equally complex.
The question I have is what is the best way to deal with database access in this kind of application? Is it wise to use persistence layer or DAL (eg. NHibernate, Subsonic)? I am worried about potential leaks, eventual problems with GC that could all have a negative impact on uptime, and which are something to think about in long running apps.