MVC4+EF5 edmx代码分析
本文分析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代码分析的更多相关文章
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- edmx代码分析
http://www.cnblogs.com/FoundationSoft/archive/2011/01/08/1930479.html 本文分析Entity Framework从数据库自动生成的模 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(48)-工作流设计-起草新申请 系列目录 创建新表单之后,我们就可以起草申请了,申请按照严格的表单步骤和分 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤 系列目录 步骤设计很重要,特别是规则的选择. 我这里分为几个规则 1.按自行 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单 系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航 系列目录 本节主要知识点是easyui ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为s ...
随机推荐
- 利用GoAccess分析Nginx访问日志
原文链接:https://blog.csdn.net/yown/article/details/56027112 需求:及时得到线上用户访问日志分析统计结果,以便给开发.测试.运维.运营人员提供决策! ...
- [转]MySQL常用字符串函数
本文转载自:http://www.cnblogs.com/geaozhang/ 是最常用的的一种函数,在一个具体应用中通常会综合几个甚至几类函数来实现相应的应用: 1.LOWER(column|str ...
- ES6 imports用法
import defaultExport from "module-name"; import * as name from "module-name"; // ...
- Delphi采用接口实现DLL调用
Delphi使用模块化开发,可以采用DLL或者BPL,两者的区别是BPL只能被同版本的Delphi使用,DLL可以被不同版本和不同开发工具的开发的软件调用. 因此我们的软件大多使用Delphi作为界面 ...
- 使用docker搭建laravel记叙
第一步,先从dockerhub上pull一个docker镜 docker pull laraedit/laraedit 这个docker镜像已经安装了 nginx.laravel和mysql,所以不需 ...
- Android零碎知识点
1.android:foreground="?attr/selectableItemBackground" ###设置水波纹效果 2.android:contentDescri ...
- 20145202马超《java》【课堂实验】P98测试
当时在加水印所以没来得及提交,然而我回宿舍第一时间就提交了,希望老师额能够看到
- 成都Uber优步司机奖励政策(1月25日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 【机器学习笔记】自组织映射网络(SOM)
什么是自组织映射? 一个特别有趣的无监督系统是基于竞争性学习,其中输出神经元之间竞争激活,结果是在任意时间只有一个神经元被激活.这个激活的神经元被称为胜者神经元(winner-takes-all ne ...
- dva 路由跳转
1.从props取出并传递history 取 const { history } = this.props 用 <button onClick={ () => history.push(' ...