http://blog.csdn.net/wangyongxia921/article/details/42061695

一、EnityFramework

EnityFramework的全程是ADO.NET Entity Framework 。和Nhibernate一样,EF
同样是遵守ORM的思想,利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性
(property),关系则转换为结合属性 (association),让数据库的 E/R
模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。

EF是如何来实现这个原理的呢?

EF中存在一个主要的文件:*.edm 。这就是EF的核心。EF以EDM( Entity Data Model

为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema
三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用,今天咱们讨论的是EDM,先看图:

这三层的功能分别是:

      (1) 概念层:负责向上的对象与属性显露与访问。
    (2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
    (3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。这样协同工作让数据访问的工作得以顺利与完整的进行。
 
二、edm对应的XML
   edm 有三层,与之对应的xml也有三层:csdl(Conceptual Schema Definition
Language),msl(Mapping Specification Language),ssdl(Storage Schema
Definition Language)。

1、CSDL基本结构
      这个文件完全以程序语言的角度来定义模型的概念。即其中定义的实体、主键、属性、关联等都是对应于.NET Framework中的类型。下面是csdl的基本结构,没有实体关联:

  1. <EntityContainer Name="EmployeesContext">
  2. <EntitySet Name="Employees" EntityType="Employees.Employees" />
  3. </EntityContainer>
  4. <EntityType Name="Employees">
  5. <Key>
  6. <PropertyRef Name="EmployeeId" />
  7. </Key>
  8. <Property Name="EmployeeId" Type="Guid" Nullable="false" />
  9. <Property Name="LastName" Type="String" Nullable="false" />
  10. <Property Name="FirstName" Type="String" Nullable="false" />
  11. <Property Name="Email" Type="String" Nullable="false" />
  12. </EntityType>

每个节点含义如下;

EntityContainer

 

Name

EntityContainer的名称,其将作为产生的ObjectContext类的名称

 

EntitySet

 

Name

ObjectContext内与此Entity类型对应的属性名

EntityType

ObjectContext内与此Entity类型对应的属性的类型

AssociationSet

 
 

End

有两个End子节点,分别描述建立此关系的两个EntitySet

 

Role

对应到Association中End节的Role属性,起到将AssociationSet与Association相关连的作用。

注意:如果 该实体有与其他实体关联,有如下变动:

(1):那么在EntityContainer中就会多出一个Association节点,Association节,这是真正定义关系的地方。看如下实例:

  1. <EntityContainer Name="ITOO_UIEntities" annotation:LazyLoadingEnabled="true">
  2. <EntitySet Name="Controls" EntityType="ITOO_UIModel.Controls" />
  3. <EntitySet Name="NonQueryProperties" EntityType="ITOO_UIModel.NonQueryProperties" />
  4. <EntitySet Name="QueryProperties" EntityType="ITOO_UIModel.QueryProperties" />
  5. <AssociationSet Name="ControlsQueryProperties" Association="ITOO_UIModel.ControlsQueryProperties">
  6. <End Role="Controls" EntitySet="Controls" />
  7. <End Role="QueryProperties" EntitySet="QueryProperties" />
  8. </AssociationSet>
  9. <<span style="color:#FF0000;">AssociationSet</span> Name="ControlsNonQueryProperties" Association="ITOO_UIModel.ControlsNonQueryProperties">
  10. <End Role="Controls" EntitySet="Controls" />
  11. <End Role="NonQueryProperties" EntitySet="NonQueryProperties" />
  12. </AssociationSet>
  13. </EntityContainer>

(2)EntityType节点中增加:NavigationProperty节点

  1. <EntityType Name="NonQueryProperties">
  2. <Key>
  3. <PropertyRef Name="NonQueryId" />
  4. </Key>
  5. <Property Name="NonQueryId" Type="Guid" Nullable="false" />
  6. <Property Name="PropertyName" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  7. <Property Name="PropertyDesc" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  8. <Property Name="ControlHtmlName" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  9. <Property Name="ControlHtmlId" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  10. <Property Name="IsNecessary" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  11. <Property Name="IsShow" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  12. <Property Name="EntityName" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  13. <Property Name="EntityDesc" Type="String" Nullable="false" MaxLength="Max" FixedLength="false" Unicode="true" />
  14. <NavigationProperty Name="Controls" Relationship="ITOO_UIModel.ControlsNonQueryProperties" FromRole="NonQueryProperties" ToRole="Controls" />
  15. </EntityType>

具体节点的含义如下:

EntityType

 

Name

Entity Class的名称

Abstract

是否为抽象类

BaseType

父类

 

Key

主键

 

Property

主键之属性

Name

属性名

Property

属性

Name

属性名

Type

属性类型

Nullable

是否允许null

MaxLength

属性最大长度

FixLength

是否固定长度

NavigationProperty

关系属性

这就是基本的CSDL ,你在edm中添加一个实体,用模型画出来的,然后通过打开XML方式来查看,对比XML中的csdl ,你会发现两者一样。
下篇继续:edm中ssdl。

Entity Framework的核心 – EDM(Entity Data Model) 一的更多相关文章

  1. Entity Framework连接Mysql数据库并生成Model和DAL层

    Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架.相比于LINQ TO SQL,EF框架具有很明显的优势: EF框架 ...

  2. mvc+entity framework database first,生成的model每次更新一个表会更新所有的model

    在使用Entity Framework 的Database frist或model first时,直接加attribute到modle类上是太现实也不合理的,因为model类是自动生成的,重新生成后会 ...

  3. Lerning Entity Framework 6 ------ Working with in-memory data

    Sometimes, you need to find some data in an existing context instead of the database. By befault, En ...

  4. Entity Framework 教程——什么是Entity Framework

    什么是Entity Framework 编写和管理ADO.NET是一个繁琐而又无聊的工作.微软为你的应用提供了一个名为"Entity Framework"的ORM框架来自动化管理你 ...

  5. Entity Framework入门教程: Entity Framework支持的查询方式

    Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...

  6. Entity Framework 全面教程详解(转)

    目录 预备知识    2 LINQ技术 2 LINQ技术的基础 - C#3.0    2 自动属性    2 隐式类型    2 对象初始化器与集合初始化器    3 匿名类    3 扩展方法    ...

  7. 转载Entity Framework全面教程

    转载原地址:http://www.cnblogs.com/lsxqw2004/archive/2009/05/31/1495240.html#_Toc228672754 预备知识    2 LINQ技 ...

  8. Entity Framework 配置

    Entity Framework的核心 – EDM(Entity Data Model) EDM概述 实体数据模型,简称EDM,由三个概念组成.概念模型由概念架构定义语言文件 (.csdl)来定义,映 ...

  9. Entity Framework 教程(转)

    预备知识    2 LINQ技术    2 LINQ技术的基础 - C#3.0    2 自动属性    2 隐式类型    2 对象初始化器与集合初始化器    3 匿名类    3 扩展方法    ...

随机推荐

  1. 12-24 关于UIScroView 控件的学习

    在iOS开发中,滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图.滚动视图有以下两个主要作用: 让用户可以通过拖拽手势来观看想看到的内容 让用户可以通过捏合手势来放大或缩小观 ...

  2. SQL中让某一字段更新时自动加1

    update 表 set 字段名=字段名+1 where ....

  3. simtrace之探秘SIM卡中的世界

    0×00 关于SIM卡 众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块.不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于j ...

  4. Asp.Net中Ajax实现登陆判断

    Default.aspx: <head runat="server"> <title>无标题页</title> <script type= ...

  5. VS.net中快捷键收缩和展开代码段

    i. Ctrl-M-O   折叠所有方法 ii. Ctrl-M-P   展开所有方法并停止大纲显示(不可以再折叠了) iii. Ctrl-M-M   折叠或展开当前方法 iv. Ctrl-M-L展开所 ...

  6. 图像和滚动 、 编程规范和Xcode(一)

    1 在界面上以各种模式显示图片 1.1 问题 在ios开发中经常需要展示图片以满足需求和美化界面,本案例将学习如何以代码的方式使用UIImageView视图控件来展示图片,如图-1所示: 图-1 1. ...

  7. 怎样查看python的api

    python -m pydoc -p 4567 python -m pydoc表示打开pydoc模块,pydoc是查看python文档的首选工具: -p 4567表示在4567端口上启动server; ...

  8. C专家编程学习 1

    1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x)   #define a ...

  9. linux权限管理_ACL权限

    一.什么是ACL权限 ACL是Access Control List(访问控制列表)的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的 ...

  10. CSS3教程:pointer-events属性值详解 阻止穿透点击

    转:http://www.poluoluo.com/jzxy/201109/142876.html 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样 ...