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,例如:


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

3、Entity Client

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


Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐