If we are using a relational database, there is an impedance mismatch with the data and our domain classes, since the data is relational whereas our domain is composed of objects. The aim of using ORM is to eliminate (or hide) this mismatch so that we can totally ignore the persistence problems and instead focus on our code rather than trying to generate pesky SQL statements. Having said that, there are many valid cases to drop back to SQL statements, such as performance tuning cases or complex reports.
Entity Framework (EF) is the Object Relational Mapping (ORM) framework that enables developers to work on domain-specific objects directly for data access instead of working on database queries. This reduces a lot of the code complexity in the data access layer of the application.
Before discussing Entity Framework and its features, let us pause for a moment...