edmx代码分析
http://www.cnblogs.com/FoundationSoft/archive/2011/01/08/1930479.html
本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx)。
1. 概述
本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部门表),一个用户必须属于一个分公司,因此用户表有一外键关联到分公司表。数据(实体)模型如图1。
图1 数据模型
2. 整体结构
以文本方式打开.edmx文件,可以看到这是一个xml文件,根结点下包括2部分内容,如图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所示。
图8 概念模型Runtime.ConceptualModels结构
从图8可以看出,Runtime.ConceptualModels结构与Runtime.StorageModels结构是完全一致的,如果展开各个子结点就会看到,内部的结构也是一致的,在此就不再一一分析。
5. 映射Mappings
映射指的是物理模型到概念模型的映射。这部分内容比较简单,Mappings结点下面有一个EntityContainerMapping结点,再下面对每个实体生成一个结点EntitySetMapping,其中对每一列(属性)都进行了映射。如图9所示。
图9 映射Runtime.Mappings结构
版权所有:基础软件。作者邮箱:sun.j.l.studio@gmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。
edmx代码分析的更多相关文章
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- MVC4+EF5 edmx代码分析
本文分析Entity Framework(EF)从数据库自动生成的模型文件代码(扩展名为edmx). 一. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部门表),一 ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
- pmd静态代码分析
在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...
- [Asp.net 5] DependencyInjection项目代码分析-目录
微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)
Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...
- 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
- STM32启动代码分析 IAR 比较好
stm32启动代码分析 (2012-06-12 09:43:31) 转载▼ 最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
随机推荐
- SQL Server使用游标或临时表遍历数据
方法一:使用游标(此方法适用所有情况,对标结构没有特殊要求.) declare @ProductName nvarchar() declare pcurr cursor for select Prod ...
- Centos下编译JDK
因为OpenJDK是开源的,这里使用openJDK进行编译联系 环境要求 Centos6.7 64位 openjdk-7u40-fcs-src-b43-26_aug_2013.zip bootstra ...
- nginx正向代理,反向代理,透明代理(总结)
1正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板, 简单的说, 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 这个代理服务器呢,他能访问那个我不能访问的网站 于是我先连 ...
- swift中的结构体和枚举
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...
- 网络流 poj 3308 最小割
t个样例 n*m的矩阵 L个伞兵 给出每行每列装激光的花费 伞兵的位置 要求杀死所有伞兵 总费用为这些费用的乘积 求花费最小 建图 源点 -> 行 -> 列 -> 汇点 ...
- 卸载移动硬盘出现 device is busy
umount /dev/sdb1 # device is busy fuser -m -v /dev/sdb1 # 查看 fuser -m -k /dev/sdb1 # 杀死进程
- 【BZOJ-3784】树上的路径 点分治 + ST + 堆
3784: 树上的路径 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 462 Solved: 153[Submit][Status][Discuss ...
- 【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用最大流)
2055: 80人环游世界 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 321 Solved: 201[Submit][Status][Discus ...
- MapReduce设置输出分隔符
conf.set("mapred.textoutputformat.ignoreseparator","true"); conf.set("mapre ...
- 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...