zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    django模型005
    django模型004
    django视图003
    django视图002
    django视图001
    开始学习Django框架,感谢虫师,这里会记录学习的过程和心得!开始Django吧!
    新手超详细的Github教程,MAC版本非windows版本
    GitHub 新手详细教程(转载)
    解决MAC电脑Sequel Pro encountered an unexpected error 问题(转载)
    python用二进制读取文件
  • 原文地址:https://www.cnblogs.com/pingming/p/4523777.html
Copyright © 2011-2022 走看看