Entity Framework自动生成的模型edmx文件代码分析

edmx 代码分析

本文分析 Entity Framework 从数据库自动生成的模型文件代码(扩展名为 edmx )。

1. 概述

本文使用的数据库结构尽量简单,只有 2 个表,一个用户表和一个分公司表(相当于部门表),一个用户必须属于一个分公司,因此用户表有一外键关联到分公司表。数据(实体)模型如图 1

Entity Framework自动生成的模型edmx文件代码分析_第1张图片

1   数据模型

2. 整体结构

以文本方式打开 .edmx 文件,可以看到这是一个 xml 文件,根结点下包括 2 部分内容,如图 2 所示。

Entity Framework自动生成的模型edmx文件代码分析_第2张图片

2  整个文档由 2 大部分组成

2 中,第一部分为 关系用以自动生成实体类、映射、属性等 cs 代码,是接下来要重点分析的内容。 部分是由设计器使用的,包含了图的布局等信息,与本文主题无关,忽略之。

接下来重点分析 Runtime 结点,展开此结点,可看到包括 3 部分,存储模型(或者物理模型) StorageModels 、概念模型 ConceptualModels 和映射 Mappings ,如图 3 所示。

Entity Framework自动生成的模型edmx文件代码分析_第3张图片

3  Runtime 3 大组成部分

下面来逐个分析 Runtime 的这三个部分。

3. 物理模型 StorageModels

StorageModel 下面只有一个子结点 Schema 。在 Schema 下面包括 3 部分内容,分别是实体容器 EntityContainer 、实体类型 EntityType (每个实体都生成一个这样的结点),关系 Association (数据库的每个外键关系都生成一个这样的结点)。如图 4 所示。

Entity Framework自动生成的模型edmx文件代码分析_第4张图片

4  Runtime.StorageModel 内容

EntityContainer 里面的内容如下。

Entity Framework自动生成的模型edmx文件代码分析_第5张图片

5  Runtime.StorageModel.EntityContainer 内容

从图 5 可以看出, EntityContainer 列出了存储模型中包括的实体和关系。

再来看 EntityType 结点的内容。这个结点对应于一个数据库表,对应于一个实体。数据库中有多少表,就生成多少这样的结点。下面以 SystemUser 为例(因为这个表有外键)看结点的内容,如图 6 所示。

Entity Framework自动生成的模型edmx文件代码分析_第6张图片

6  Runtime.StorageMode.EntityType 结点内容

从图中可以看出, EntityType 结点主要内容就是列出了表中各个字段,并没有反映外键关系。外键关系是在后面要分析的内容中表示的。

下面再来看 Association 结点内容。这个结点对应数据库的一个外键关系,每一个外键都生成一个 Association 结点。本例中,外键为用户到分公司,结点内容如图 7 所示。

Entity Framework自动生成的模型edmx文件代码分析_第7张图片

7  Runtime.StorageModel.Association 结点内容

从图 7 可以看出, Association 结点首先定义了外键关系的双方以及重数,接下来定义了主键表、列和外键表、列。

到此为止,物理模型 StorageModel 已经分析完毕。

4. 概念模型 ConceptualModels

对于自动生成的实体模型来说,概念模型与物理模型的内容是一致的。概念模型结构如图 8 所示。

Entity Framework自动生成的模型edmx文件代码分析_第8张图片

8  概念模型 Runtime.ConceptualModels 结构

从图 8 可以看出, Runtime.ConceptualModels 结构与 Runtime.StorageModels 结构是完全一致的,如果展开各个子结点就会看到,内部的结构也是一致的,在此就不再一一分析。

5. 映射 Mappings

映射指的是物理模型到概念模型的映射。这部分内容比较简单, Mappings 结点下面有一个 EntityContainerMapping 结点,再下面对每个实体生成一个结点 EntitySetMapping ,其中对每一列(属性)都进行了映射。如图 9 所示。

Entity Framework自动生成的模型edmx文件代码分析_第9张图片

9  映射 Runtime.Mappings 结构


版权所有:基础软件。作者邮箱:[email protected]。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。

你可能感兴趣的:(C#,代码分析,数据库,schema,存储,文档,扩展)