There is no right answer, it all depends on your project. Since Simon indicates that your application is data-driven, then it may make sense, depending on the size and complexity of the domain, to use the non-oop paradigm. I had great success in creating a system using the Transaction Script template, which transmitted XML messages throughout the system.
However, this system began to break down after five or six years, when the application increased in size and complexity (5 or 6 websites, several web services, many COM + components, outdated and .net code, 8 + databases with 800 + tables 4000+ procedures). No one knew there was anything, and the replication was rampant.
There are other ways to make things easier, then OOP; however, if you have a very complex domain, then the hainvg rich domain model is ideal IMHO, as it allows business rules to be expressed in good encapsulated components.
To answer your question, avoid code generators if you can. Code generators are a recipe for disaster, but if you go with code generation, do not modify the generated code. Also, make sure that you have a good process that makes it easy for developers to get new generated code.
I recommend using either the following: ORM or the manual handle of a light DAL. Currently, I am transitioning to a project on nHibernate with my handmade DAL and have great success; however, I like to be able to use any option. In addition, if you properly share your concerns (“Accessing data from a business layer from a presentation”), you may have one service level that can talk to Dao (Data Access Object), which for one object is ORM, and for another - manually). I like this flexibility because it allows you to use the best tool for the job.
I like nHibernate over a handled DAL because, although my DAL abstracts most of the ADO.Net code, you still have to write code that takes a data reader for an object or object and creates parameters.