ORMs und Codegeneratoren stehen auf der einen Seite des Feldes, Stored Procedures auf der anderen. In der Regel ist es einfacher, ORMs und Codegeneratoren in Greenfield-Projekten zu verwenden, da Sie Ihr Datenbankschema an das von Ihnen erstellte Domänenmodell anpassen können. Bei Legacy-Projekten ist es viel schwieriger, sie zu verwenden, da es schwierig ist, eine Software, die mit einer "data-first"-Mentalität geschrieben wurde, mit einem Domänenmodell zu verbinden.
Dennoch haben alle drei Ansätze ihren Wert. Gespeicherte Prozeduren lassen sich leichter optimieren, aber es kann verlockend sein, in ihnen Geschäftslogik unterzubringen, die in der Anwendung selbst wiederholt werden kann. ORMs funktionieren gut, wenn Ihr Schema mit dem Konzept des ORMs übereinstimmt, können aber andernfalls schwer anzupassen sein. Codegeneratoren können einen guten Mittelweg darstellen, da sie einige der Vorteile eines ORM bieten, aber eine Anpassung des generierten Codes ermöglichen. Wenn Sie sich jedoch angewöhnen, den generierten Code zu ändern, haben Sie zwei Probleme, da Sie ihn bei jeder erneuten Generierung ändern müssen.
Es gibt keine einzig richtige Antwort, aber ich tendiere eher zur ORM-Seite, weil ich glaube, dass es mehr Sinn macht, mit einer objektorientierten Denkweise zu denken.