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


    edmx代码分析

    本文分析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结构

  • 相关阅读:
    DataPager 分页样式(css)
    Mysql日志详解
    Oracle 优化器
    [oracle]对象统计数据
    [oracle] analyze 和dbms_stats 的区别
    增加SAP HEAP大小
    Problems with SYSDBA/SYSOPER/INTERNAL connect
    Physical Standby Switchover_status Showing Not Allowed
    REHL8 oracle 19C RAC安装中的坑
    REHL8 oracle 19C RAC安装四(数据库创建)
  • 原文地址:https://www.cnblogs.com/sylone/p/6081175.html
Copyright © 2020-2023  润新知