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

一、 概述

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

                        (图1 数据模型)

二、 整体结构

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

                                   (图2 整个文档由2大部分组成)

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

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

                        (图3 Runtime的3大组成部分)

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

2.1、 物理模型StorageModels

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

                                              (图4 Runtime.StorageModel内容)

2.1.1、EntityContainer里面的内容如下。

                                           (图5 Runtime.StorageModel.EntityContainer内容)

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

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

                         (图6 Runtime.StorageMode.EntityType结点内容)

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

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

                            (图7 Runtime.StorageModel.Association结点内容)

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

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

2.2、 概念模型ConceptualModels

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

                            (图8 概念模型Runtime.ConceptualModels结构)

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

2.3、映射Mappings

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

                                                (图9 映射Runtime.Mappings结构)

本文改自:http://www.cnblogs.com/FoundationSoft/archive/2011/01/08/1930479.html

MVC4+EF5 edmx代码分析的更多相关文章

  1. EF自动生成的模型edmx代码分析

    edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...

  2. edmx代码分析

    http://www.cnblogs.com/FoundationSoft/archive/2011/01/08/1930479.html 本文分析Entity Framework从数据库自动生成的模 ...

  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请 系列目录 创建新表单之后,我们就可以起草申请了,申请按照严格的表单步骤和分 ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤 系列目录 步骤设计很重要,特别是规则的选择. 我这里分为几个规则 1.按自行 ...

  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单 系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航 系列目录 本节主要知识点是easyui ...

  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为s ...

随机推荐

  1. Python文本操作2

    # list3 = [# {"name": "alex", "hobby": "抽烟"},# {"name&q ...

  2. 如何防止index.html首页被篡改

    近期发现公司网站首页文件经常被篡改为indax.php或indax.html,导致网站的功能无法正常使用,百度搜索关键词,在显示结果中点击公司网站,打开后跳转到别的网站上去了,尤其我们在百度做的推广, ...

  3. 分享一个强大的makedown编辑器

    Yosoro 官网地址 https://yosoro.coolecho.net/ 很强大,支持直接粘贴图片,是直接上传到github仓库. 可直接导出md,html,pdf格式,特别方便 找了好几天的 ...

  4. c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!

    本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下: 用strlen计算数组长度要考虑进去\0 用sizeof计算字符串长度也要考虑进去\0 而s ...

  5. 笔记-jinja2语法

    笔记-jinja2语法 1.      基本语法 控制结构 {% %} 变量取值 {{ }} 注释 {# #} 2.      变量 最常用的是变量,由Flask渲染模板时传过来,比如上例中的”nam ...

  6. python2和python3的一些区别

    性能:py3.x起始比py2.x效率低,但是py3.x有极大的优化空间,效率正在追赶. 编码:py3原码文件默认utf-8编码,使得变量名更为广阔. 语法:1,去除了 <>  ,改用了  ...

  7. BZOJ1432_Function_KEY

    题目传送门 找规律. 画一个像这样的图: 不同颜色为不同层,因为函数图像可对称,所以只考虑K<=N/2的情况. 最小为min(K,N-K+1)*2. N=1时特殊考虑,答案为1. code: # ...

  8. 最新flowable研究学习及其汉化flowable6.3中文

    flowable 是activiti的分支,现在感觉比activiti要强大一些,官网是 https://flowable.org/ 下载最新的6.31版本. 放到tomcat下面,汉化需要对flow ...

  9. hdu2066一个人的旅行(floyd优化)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  10. hdu1596find the safest road(floyd)

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...