So far, we have seen that we can, with minimal effort, write an object-oriented application which can persist its data to a RDBMS and can also recreate objects by reading previously persisted data from the RDBMS. At no time did we have to deal with any specifics of the RDBMS we chose as our data store.
If we had decided not to use an ORM framework and handcraft our data access layer, then we would have had to implement a considerable amount of code. We would also be required to have created the database schema from hand and write SQL statements for insert, update, delete, and read operations. For the C# compiler, these SQL statements are just strings and no syntax checking is possible.
Using datasets and code generation might seem to diminish the problem, but this is not a real solution. On one hand, using datasets instead of domain objects makes it more difficult to write object-oriented, extendable, scalable, and robust applications...