Evil 域

当Evil遇上先知

导航

ADO.NET Entity Framework 试水——概念

Posted on 2008-08-19 20:53  Saar  阅读(4615)  评论(23编辑  收藏  举报

ADO.NET Entity Framework中,提出使用概念模型建模,以代替被沿用了20年左右的、直接针对关系型数据库的物理模型的建模的架构。这一概念模型,被称为"实体数据模型"(Entity Data Model)。在实体数据模型中,同时引出了一些新的概念,来描述这一模型中形形色色的对象。本篇将描述其中两个非常重要的概念——实体(Entities)、关系(Relationships)。

 

1. 实体

 

实体(Entity)是实例类(Entity Type)的一个具体的实例。例如,一个人具体的人。张三、李四、王五,随便抓一个出来,就是一个实体。我的一个ThinkPad T61笔记本,也是一个实体。

实体类用于描述实体的属性,例如,人这个实体类就可能包括姓名、性别、年龄、身高、体重等属性;而笔记本的实体类就可能包括品牌、型号、价格、重量等属性。当然,除了以上列举的这种简单属性,实体类也可以有复杂属性,例如,笔记本的键盘+指点杆+指纹识别器就可以形成一个"输入设备"的复杂属性。

实体(Entities)存在于实体集(Entity Set)中,就像表格中的行存在于表格中的一样。而实体集又定义在实体容器(Entity Container)中。同一个实体窗口中,可能存在多个由相同实体类构成的不同实体集——晕了没有?举个例子吧。我们可能把高端笔记本实体放在一起,形成一个高端笔记本的实体集;又把低端笔记本实体放在一起,形成一个低端笔记本实体集;这样,我们有了两个不同的实体集,但这两个实体集(Entity Set)其实都是由笔记本实体类(Notebook Entity Type)的实体构成的,当我们把这两个不同的实体集放在同一个实体容器中时,就是前面所说的那种情况了:

实体容器

实体集1(高端笔记本)

 

 

实体集2(低端笔记本)

 

 

实体集1、实体集2都由笔记本构成,故其实体类均为笔记本(Notebook Entity Type)。

每一个实体类都会定义一个属性或多个属性为一个键属性(Key Properties),用于唯一标识一个实体。例如一个人的身份证号、一个笔记本的出厂序列号等。

实体类型可以通过继承关系加以扩展,例如一个手写笔记本实体类(Tablet Notebook Entity Type)可以继承自笔记本实体类(Notebook Entity Type),并且扩展出一个新的属性:手写笔……继承,在这其中,表达一种"是"的关系 :"手写笔记本"是"笔记本"——就这么简单。

让我们来形像化一下:

再次打开上一文中的示例,双击打开NotebookDb.edmx,这样,我们就打开了一个数据实体模型。整个模型,就可以看作是一个实体容器(Entity Container)。这里,我们拥有两个实体类(Entity Type),分别是:Warehouse类和NotebookStorage类。用这两个实体类进行实例化,我们就可以得到具体的实体(Entity),而实体合起来,便形成了相对的实体集(Entity Set)。

 

2. 关系

 

关系定义了实体之间的关联。例如,员工和老板之间的关联是一种关系。在上图中,笔记本与所在仓库之间的关联是一种关系……把关系定义成实体模型中的第一级的概念的好处是,可以直接通过关系,来访问相关联的对象。例如,在上图所示,大家注意到NotebookStorage实体类中含有一个Navigation属性Warehouse,通过它,就可以访问到与NotebookStorage实体相关联的Warehouse实体。关系通过关系类(Association Type)来定义。跟关系型数据库中的表与表的关系一样,实体数据模型中的关系也可以分为一对一、一对多以及多对多关系。

 

3. 小结

 

在本文中,我们看到了实体数据模型中两个重要的概念,它们分别是:实体和关系。我们还谈到了与实体有关系的几个概念:实体类、实体集、实体容器等;关系则相对简单,表明了实体与实体间的联系,分为一对一、一对多以及多对多关系。

 

4. 系列目录

 

===返回索引===