Entity Framework架构介绍

jopen 12年前
     <p>Entity Framework 整体架构如图:</p>    <p><img alt="Entity Framework架构介绍" src="https://simg.open-open.com/show/9eadb529c206f8cd5edabb5adbafdbb7.jpg" width="528" height="355" /></p>    <p> </p>    <p>Entity Data Model(EDM)是类和数据库之间的映射模型,它包含三个映射文件。</p>    <p>LINQ to Entities和Entity SQL是查询对象模型的两种语言。</p>    <p>Object Services层在执行查询时将查询转换为一个命令树,并将这个命令树传递给Entity Client;在返回结果时将Entity Client层获取的对象表格式数据转换为对象,同时它也负责管理对象状态,跟踪对象的改变。</p>    <p>Entity Client data provider层又称为Entity Client主要将LINQ to Entities和Entity SQL的查询转换为SQL语句,同时将数据库表格式数据转换为对象表格式数据,并传递给Object Services层。</p>    <p>1、EDM</p>    <p>EDM由三个XML文件组成,三个文件主要提供相关的metadata。如表:</p>    <table border="1" cellspacing="1" cellpadding="1" width="600">     <tbody>      <tr>       <td>Filename</td>       <td>Description</td>       <td>Alternative name</td>       <td>Extension</td>      </tr>      <tr>       <td>Conceptual model</td>       <td>Describes the model classes and<br /> their relationships</td>       <td>Conceptual schema, conceptual<br /> side</td>       <td>CSDL</td>      </tr>      <tr>       <td>Storage model</td>       <td>Describes the database tables,<br /> views, and stored procedures, and<br /> their keys and relationships</td>       <td>Storage schema, storage side</td>       <td>SSDL</td>      </tr>      <tr>       <td>Mapping model</td>       <td>Maps the conceptual and storage<br /> models</td>       <td>Mapping schema, mapping side</td>       <td>MSL</td>      </tr>     </tbody>    </table>    <p> </p>    <p>在运行时,这些文件将被解析为对象,这些对象可以被查询从而获得类,数据库以及映射的metadata,当Entity Framework进行映射时,它会查询EDM从而获取metadata。</p>    <p>Visual Studio的EF designer team设计了新的文件EDMX文件,EDMX文件将上述三个文件集合起来同时加入了设计器需要的信息,然而,EDM才是真正的映射层,在编译时,EDMX文件将被分割开,并产生三个EDM文件。</p>    <p>2、Object Services</p>    <p>Object Services在EF中主要负责管理对象。</p>    <p>当执行查询时,Object Services将查询转换为一个命令树,并将这个命令树传递给Entity Client,这一过程称为查询转换,转换过程会因使用LINQ to Entities或者Entity SQL而不同。</p>    <p>当返回结果时,Object Services将Entity Client层获取的对象表格式数据转换为对象,之所以成为对象表格式数据,是因为它与数据库存储的数据库表格式数据有所不同,对象表格式数据的没一行代 表一个对象,如果它有属性引用其它类,它的列将会含有该类的整个行,这一过程称为object materialization,例如:</p>    <p><img style="width:667px;height:132px;" alt="Entity Framework架构介绍" src="https://simg.open-open.com/show/dc0cdac8a857559e36f40ceefb3fe4cb.jpg" /></p>    <p>Context是Object Services和用户的接口,它像一个缓存一样保存着当前的对象模型,这些对象同时被state manager跟踪,这个机制将会管理对象的改变,并在适当时候正确的更新到数据库。</p>    <p>3、Entity Client</p>    <p>在执行查询时,Entity Client将命令数转换为SQL语句,在返回结果时,Entity Client将数据库表格式数据转换为对象表格式数据,并传递给Object Services层。</p>    <p> </p>