ADO.NET Entity Framework Layering
The ADO.NET Entity Framework consists out of four layers which I will briefly explain in this post.
The Storage Provider consist of the data-access providers that access and communicate with a data source, such as a Microsoft SQL Server database or Oracle (e.g. SqlClient, OracleClient, etc).
The Mapping Layer surfaces the EDM and mapping concepts in the ADO.NET API. The top level classes of this layer are the MappingProvider, MapConnection and MapCommand (these names are subject to change as work progresses). The EDM model provides your application with a conceptual view (client-views) of the the data of a given domain. The mapping provider is given the EDM schema and the mapping information, so it can internally use the mapping infrastructure to translate between the conceptual and logical schema. By using the EDM model and the mapping provider your application no longer uses or sees database-specific constructs; the entire application operates in terms of the higher-level EDM model.
This also means that you can no longer use the native database query language (SQL-92) and have to use Entity SQL instead. Entity SQL is designed to fully leverage the expressivity of the entity data model in which queries can be statically formulated at design time or constructed at runtime.
Object Services is targeted at eliminating the mismatch between data and the application code (impedance mismatch). Regular ADO.NET exposes data from databases as rows and columns, the same data is now exposed as objects (at least we now have a choice). This layer also includes more advanced services often supported by object-relational mapping frameworks such as identity, change tracking, checks for optimistic concurrency and update processing (not a definite list).
LINQ to Entities integrates the LINQ project with the Entity Framework to naturally express queries within the higher-level object-oriented programming language itself (such as C#). The LINQ to Entities layer depends on the object services and the mapping layer. LINQ queries are translated to canonical query trees, which is the same representation that results from parsing an Entity SQL statement and is than handed over to the mapping layer.