Urka argomentone, potrebbe diventare una discussione molto lunga...
Io personalmente i non uso generatori di codice lo faccio a mano oppure uso un ORM tipo NHibernate.
Per valutare la scelta da prendere devi analizzare diversi aspetti, costi, tempi, performance, ecc.
Personalmente ritengo che con NH (secondo me è ottimo), hai un risparmio notevole di tempi e il rischio di possibili errori si riduce drasticamente. È anche vero che non mi piace fossilizzarmi sulle cose, ossia bellissimo NH, ma lo uso veramente poco, perchè devo ben capire quello che c'è sotto e perchè delle cose mi piace farmele a manazza, ma questo forse è un problema mio.
Sulle performance di NH, non parlo perchè è performantissimo, poi se la gente mi viene a dire guarda ho 5000 utenti collegati in contemporanea e NH non lo posso usare perchè è lento, la gente dice una cosa non vera perchè in quel momento il tuo problema non è NH, ma la banda ed il server che deve gestire un carico del genere.
La dimostrazione la hai andando a vedere chi utilizza NH.
Ora passando al piatto forte, ossia su cosa deve contenere un buon DAL non si può che non mensionare Martin Fowler (
http://www.martinfowler.com/) che nel suo libro più famoso PoEAA (Patterns of Enterprice Application Architecture
http://www.martinfowler.com/books.html#eaa) spiega la sua e mostra i pattern più adatti per far si che un DAL, o meglio un'Applicazione Enterprice dovrebbe avere, quindi : Unit Of Work, Lazy Load, Identity Map, Special Case, ... ed in più deve poter gestire correttamente un cuncurrency che è il problema principale delle grandi applicazioni.
Ora il lavoro di implementazione di tutta sta roba è veramente tanto se si pensa di farlo a mano, NH lo ha integrato di suo, ma puoi vedere un esempio pratico della sua implementazione guardando NSK (Northwind Starter Kit
http://www.codeplex.com/NSK) in modo da renderti conto della situazione (ovviamente se non lo hai già visto :-) ).
Cmq lì c'è tutto quello che dovrebbe esserci, ma prima di realizzare una roba del genere devi fare delle scelte ponderate, ossia valutare bene che tutto quello che c'è lì è realmente tutto quello che ti serve, sarebbe stupido realizzare un'applicazione sviluppata in quel modo per far vedere le foto della vacanza !!! (forse l'esempio non calza proprio però mi hai capito).
Per altre question sono qui.