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

edmx 代码分析

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

1. 概述

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

1   数据模型

2. 整体结构

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

整个文档由 2 大部分组成

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

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

3  Runtime 3 大组成部分

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

3. 物理模型 StorageModels

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

4  Runtime.StorageModel 内容

EntityContainer 里面的内容如下。

5  Runtime.StorageModel.EntityContainer 内容

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

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

6  Runtime.StorageMode.EntityType 结点内容

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

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

7  Runtime.StorageModel.Association 结点内容

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

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

4. 概念模型 ConceptualModels

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

概念模型 Runtime.ConceptualModels 结构

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

5. 映射 Mappings

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

映射 Runtime.Mappings 结构


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值