1.Entity Framwwork体系结构图数据库
Entity Framework的体系结构主要包括:EDM元数据、Entity Client、Object Services和ADO.NET Provider四部分。其中EDM是整个Entity Framework框架实现ORM最核心的部分。下面的章节会对图中Entity Framework的体系结构逐一进行介绍。app
2.EDM框架
EDM(Entity Data Model)译为实体数据模型,它主要的做用是可以将数据库中的对象(表、视图、存储过程等)映射为C#中的实体类,从而实现操做实体类就等同于操做数据库对象。编辑器
EDM的组成结构包含:CSDL(概念层)、SSDL(存储层)、对应层(MSL)。ide
CSDL:是EDM最核心的部分也叫做概念模型。在建立Entity Framework后会根据数据库中的对象(表、视图、存储过程等)生成实体类,CSDL对应的就是这些实体类的描述信息。spa
SSDL:描述数据库对象(表、视图、存储过程等)的信息,也就是将数据库中的对象信息加载到了Entity Framework中,并描述数据库对象的结构信息。插件
MSL:负责CSDL(概念层)和SSDL(存储层)的映射关系,根据MSL的映射信息能够将实体类映射为数据库中的具体对象,这样就能够知道咱们在操做某个实体类时对应到数据库操做的是那个对象(表、视图、存储过程等)。翻译
对应映射方式如图:3d
另外在Entity Framework项目中,图中的三部份内容以一个XML定义并描述其中的信息,该信息存放在名为.edmx后缀的文件中。对象
3.Entity Client
咱们知道ADO.NET操做数据库会有一套核心类库来实现,其中包括Connection、Command等,一样Entity Client模拟了ADO.NET实现了这些核心类库来对数据库操做。ADO.NET的核心操做类库是向数据库发送SQL来实现操做,而Entity Client是向EDM发送Entity SQL操做实体。咱们能够总结理解:Entity Client模仿了ADO.NET核心类库从而实现了对数据的操做能力。
4.Object Services
简单来理解就是咱们在使用实体类处理数据使用的方法。一般在操做Entity Framework实体对象时会两种方法:SQO(标准查询运算符方法)、LINQ。
如图:
图中的代码片断分别使用了SQO(标准查询运算符方法)和LINQ两种方法来操做实体对象,这种能够操做EF实体对象来实现数据操做的方法能够理解为Object Services。
5. ADO.NET Provider
无论EF有多少种体系结构最终处理后都要和数据库进行打交道(访问)。而负责与数据进行访问的就是ADO.NET Provider来完成的。上述的Entity Client虽然也和ADO.NET有过关系,可是Entity Client只是模拟ADO.NET对数据的操做方式,并生成操做命令。ADO.NET Provider会将Entity client的操做命令翻译为数据库的SQL语句来对数据库进行执行。
一般ADO.NET Provider对数据库的访问还必须有数据库厂商提供的插件进行支持,VS默认并仅仅实现了对SQL Server的访问提供。若是须要使用其余的数据库来实现Entity Framework 还须要单独去对应的数据库厂商下载单独的数据访问插件来实现。
6. edmx文件
在项目中建立Entity Framework框架后会在项目中生成一个edmx后缀的文件,展开文件结构如图:
6.1.edmx文件XML信息
Edmx文件默认打开是一个图形化的界面描述了实体的模型信息,要以XML文件的方式打开须要对文件进行右击,在弹出的快捷菜单中选择“打开方式”选项,可弹出以下界面:
在该界面中选择“自动编辑器选择程序XML”单击肯定按钮打开,打开后如图:
从图中能够看到XML中包含了SSDL、CSDL、CS mapping三种类型的节点,三个节点分别对应了EDM中的存储层、概念层、对应层。该文件是Entity Framework实现ORM的关键配置文件。
SSDL节点内容
从XML节点的内容来看就能够理解SSDL的概念,SSDL中包含了数据中全部对象并将全部对象以XML结构进行展现,从XML的节点和属性的定义来看SSDL彻底描述了数据库中的信息。
CSDL节点内容
CSDL节点下的内容描述了实体类的各类信息,结合SSDL的内容能够看出每一个项目在CSDL中都有一个一一对应的关系。
CS Mapping节点内容
根据CS Mapping节点内容EF底层能够弄清每一个实体类对应到数据库中关系信息,从而实现数据库的操做。
6.2.实体文件
在倒数第一个后缀名为tt的文件展开后,能够获取到数据库全部对象(表、视图、存储过程等)对应生成实体类,这块的实体类是和数据库中的对象一一对应的。
结构参考如图:
6.3.数据上下文类
扩展名为“.Context.cs”的类为数据上下文类,展开“.Context.tt”文件能够找到该文件。
数据库上下文类中将全部实体类做为了本身成员,咱们对数据实体的的全部操做都须要该类来完成。简单的理解“数据上下文类”,它就至关于一个数据库的管理者,经过该来完成全部对数据的操做。
从上下文类中包含的信息能够看出,数据表变成了属性、存储过程变成了方法。