It is nearly impossible today to write enterprise software without the use of one or more relational databases. Granted, there are cases when the data is transient and not stored in a database, but for the most part, software needs to consume and manipulate data in a database. It sounds easy, but there are hundreds of ways to connect software systems to databases and thousands of people who think they have the skeleton key for data access layers. Pro LINQ Object Relational Mapping in C# 2008 explains an efficient, repeatable way to apply industry design patterns to build scalable object–oriented data access layers.
Object relational mapping (OR/M) has been a gray area in Microsoft development for many years. It's not that Microsoft language developers don't understand OR/M; in fact, the opposite is true, as is exemplified by the glut of third–party .NET OR/M tools on the market. The struggle has come more from the lack of native tools with the object–oriented and object persistence capacity to effectively work in this arena. With the inception of .NET, Microsoft overcame the first obstacle by developing an object–oriented environment and framework. The second obstacle, the native object persistence layer, is only now being realized with the introduction of Language Integrated Query (LINQ) and LINQ's children, the Language Integrated Query for Relational Databases (LINQ to SQL) and the Language Integrated Query for the ADO.NET Entity Framework (LINQ to Entities). The gray area no longer exists, and the .NET developers of the world finally have the native tools required to build modular, reusable data access layers.