第一章(1) 开始学习Entity Framework啦

Entity Framework 一览
   EF集合了一系列以方便使用数据的应用程序的开发。和微软之前的数据访问技术不一样,EF和Visual Studio一起,构成了一个全面的、基于模型的生态系统,你可以用它来开发一些范围广泛的数据导向的应用程序。 比如用Asp.net和Sliverlight开发桌面程序、服务器端程序、Internet程序,用WCF的分布式多机程序等。

Model

    EF其实所做的所有工作都是为了构建模型。模型在EF中代表的意义不是凭空冒出而是逐渐演进的。在EF中有很多地方都是受到以往技术和模式的遗传影响。比如实体关系图和长时间都在用的概念-逻辑-物理分层设计的方法。

  EF用Entity Data Model(EDM)来标志模型。EDM是一种用来定义程序中用到的数据的正式结构,它定义了数据类型、明确哪种类型的关联是允许的、模型支持的schemas以及在不同schemas中的映射。(schemas不好翻译,数据库中术语,可以叫模式,db->schemas->tables)。程序你建的模型就是对应着EDM中的条目来的,这有点像EDM就是一个Class(类),而模型都是满足它的Instance(实例),但只是有点像而已,它们是不一样的,EDM中的是定义模型的结构。

   好吧,现在牵扯出来了很多术语了。首先,一个Model(模型)由三层组成:概念层、存储层和映射层。每一层的语法都是在一个XML文件中表示的,schema也在这个XML中有定义。为了方便,这三层的三个不同的XML文件都绑在了一起,构成了一个后缀名为.edmx的文件。

   概念层模型,是开发人员实际能接触的,这一层中已经没有物理存储层的迹象,在CSDL(Conceptual Schema Definition Language)中定义。VS提供了一个功能齐全的设计界面,你可以直接在概念层上操作实体类型和各种关系。概念层模型是在CSDL中定义的。

    任何有用的程序都要有数据的持久化操作,在存储层我们定义数据的存储。它包括了表、列和数据类型的定义,这在SSDL(Store Schema Definition Language)中有记录。

    在概念层和存储层的映射层就是把这两层各自的模型映射在一起。比如这个类中的属性怎么和数据库中的那个字段关联起来。这些细节在MSL(Mapping Specification  Language)中定义。

 

一些术语

  EntityType(实体类型) ,它是一个类,定义了一个新的类型。它的实例叫做Entity,但经常都被统一叫做了Entity。Entity Type中定义了一些属性,包括有标量属性(Scalar)、复杂属性(Complex type)和导航属性(navigation)。如图1-1,定义了两个EntityType:Employee和Task。它们之间的关系是一对多的。

图1-1

 

Association(关联)   也如上图,两个实体类型之间的关系叫做 Association 。有一对多,多对一,多对多和自身关联。每一个EntityType都是一个EntityKey属性,相当于主键标识,通常是由下层数据库中的实际主键决定的。

EntitySet (实体集)  实体集就是一些EntityType实例的集合,或者也包含它的派生类型。在多数情况下,给定EntityType的实例们都是在同一个实体集里的,但也有例外,叫MEST(Multiple EntitySets per Type),这个以后我们会讲到一个例子。


ComplexType (复杂类型)是相关属性的一个集合.复杂类型不像实体类型一样有一个主键标识,它更像是把一堆相关的属性组合到一起,形成一个新的属性。图1-2就是一个很好的例子。Customer有正常的标量属性(Id,Name,Phone),但同时又有两个复杂属性BillingAddress和ShipToAddress,这两个复杂属性都属于同一个Adrress的复杂类型。Address类型中包含了各种信息,但没有一个可以说是主键的,它们只是一对相关属性的集合。

 

 

 

 

 

图1-2

 

 

Navigation properties(导航属性)这个是在数据库中有直接外键关系的,EF可以通过它从一张表导航链接到另外一张表。

posted @ 2012-08-23 23:57  阿凡迪  阅读(2362)  评论(38编辑  收藏  举报