Entity Framework架构介绍_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Entity Framework架构介绍

Entity Framework架构介绍

 2013/8/14 17:21:05  蒋叶湖  博客园  我要评论(0)
  • 摘要:EntityFramework整体架构如图:EntityDataModel(EDM)是类和数据库之间的映射模型,它包含三个映射文件。LINQtoEntities和EntitySQL是查询对象模型的两种语言。ObjectServices层在执行查询时将查询转换为一个命令树,并将这个命令树传递给EntityClient;在返回结果时将EntityClient层获取的对象表格式数据转换为对象,同时它也负责管理对象状态,跟踪对象的改变
  • 标签:Framework 架构
 

Entity Framework 整体架构如图:

Entity Framework架构介绍

 

Entity Data Model(EDM)是类和数据库之间的映射模型,它包含三个映射文件。

LINQ to Entities和Entity SQL是查询对象模型的两种语言。

Object Services层在执行查询时将查询转换为一个命令树,并将这个命令树传递给Entity Client;在返回结果时将Entity Client层获取的对象表格式数据转换为对象,同时它也负责管理对象状态,跟踪对象的改变。

Entity Client data provider层又称为Entity Client主要将LINQ to Entities和Entity SQL的查询转换为SQL语句,同时将数据库表格式数据转换为对象表格式数据,并传递给Object Services层。

1、EDM

EDM由三个XML文件组成,三个文件主要提供相关的metadata。如表:

Filename Description Alternative name Extension Conceptual model Describes the model classes and
their relationships Conceptual schema, conceptual
side CSDL Storage model Describes the database tables,
views, and stored procedures, and
their keys and relationships Storage schema, storage side SSDL Mapping model Maps the conceptual and storage
models Mapping schema, mapping side MSL

 

在运行时,这些文件将被解析为对象,这些对象可以被查询从而获得类,数据库以及映射的metadata,当Entity Framework进行映射时,它会查询EDM从而获取metadata。

Visual Studio的EF designer team设计了新的文件EDMX文件,EDMX文件将上述三个文件集合起来同时加入了设计器需要的信息,然而,EDM才是真正的映射层,在编译时,EDMX文件将被分割开,并产生三个EDM文件。

2、Object Services

Object Services在EF中主要负责管理对象。

当执行查询时,Object Services将查询转换为一个命令树,并将这个命令树传递给Entity Client,这一过程称为查询转换,转换过程会因使用LINQ to Entities或者Entity SQL而不同。

当返回结果时,Object Services将Entity Client层获取的对象表格式数据转换为对象,之所以成为对象表格式数据,是因为它与数据库存储的数据库表格式数据有所不同,对象表格式数据的没一行代 表一个对象,如果它有属性引用其它类,它的列将会含有该类的整个行,这一过程称为object materialization,例如:

Entity Framework架构介绍

Context是Object Services和用户的接口,它像一个缓存一样保存着当前的对象模型,这些对象同时被state manager跟踪,这个机制将会管理对象的改变,并在适当时候正确的更新到数据库。

3、Entity Client

在执行查询时,Entity Client将命令数转换为SQL语句,在返回结果时,Entity Client将数据库表格式数据转换为对象表格式数据,并传递给Object Services层。

发表评论
用户名: 匿名