Entity Framework (又称ADO.NET Entity Framework) 是微软以 ADO.NET 为基础所发展出来的物件关联对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。
ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将资料逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。
长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与存取数据库而去学习 SQL 指令,因此在资讯业中有很多人都在研究如何将程式设计模型和数据库整合在一起,物件关联对应 (Object-Relational Mapping) 的技术就是由此而生,像Hibernate或NHibernate都是这个技术下的产物,而微软虽然有了ADO.NET这个资料存取的利器,但却没有像NHibernate这样的物件对应工具,因此微软在.NET Framework 2.0发展时期,就提出了一个ObjectSpace的概念,ObjectSpace可以让应用程序可以用完全物件化的方法连接与存取数据库,其技术概念与NHibernate相当类似,然而ObjectSpace工程相当大,在.NET Framework 2.0完成时仍无法全部完成,因此微软将ObjectSpace纳入下一版本的.NET Framework中,并且再加上一个设计的工具(Designer),构成了现在的 ADO.NET Entity Framework。
Entity Framework 利用了抽象化数据结构的方式,将每个数据库物件都转换成应用程序物件 (entity),而资料字段都转换为属性 (property),关联则转换为结合属性 (association),让数据库的 E/R 模型完全的转成物件模型,如此让程序员能用最熟悉的编程语言来呼叫存取。而在抽象化的结构之下,则是高度整合与对应结构的概念层、对应层和储存层,以及支援 Entity Framework 的资料提供者 (provider),让资料存取的工作得以顺利与完整的进行。
概念层结构定义了对象模型 (Object Model),让上层的应用程序码可以如面向对象的方式般访问数据,概念层结构是由 CSDL (Conceptual Schema Definition Language) 所撰写。
一份概念层结构定义如下所示:
<?xml version="1.0" encoding="utf-8"?><Schema Namespace="Employees" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm"> <EntityContainer Name="EmployeesContext"> <EntitySet Name="Employees" EntityType="Employees.Employees" /> </EntityContainer> <EntityType Name="Employees"> <Key> <PropertyRef Name="EmployeeId" /> </Key> <Property Name="EmployeeId" Type="Guid" Nullable="false" /> <Property Name="LastName" Type="String" Nullable="false" /> <Property Name="FirstName" Type="String" Nullable="false" /> <Property Name="Email" Type="String" Nullable="false" /> </EntityType></Schema>