实体设计器窗口对于查看一个EDM与它的成员的图形化表示非常有用。否则你可能被一堆原始的XML给搞晕,原始XML你会在本章随后章节接触到,也就是在了解了图形化的内容介绍之后。
在你根据向导产生模型之后,模型会在设计器视口里打开。如果把它给关了,可以通过在解决方案管理器里双击EDMX文件重新打开它。设计器视图是EDMX文件的默认视图。
图2-3显示的Model1.edmx的设计器显示展示了一个具有3个实体的EDM:Contact实体,Address实体和一个vOfficeAddress实体。头两个来自数据库的表而第3个来自视图。设计器里也显示一条连接Contact与Address的线代表它们之间的一个一对多的关系。每个实体都有一些标量属性,而具有关系的实体还会额外有导航属性。
标量属性的值明确包含在实体中的。例如,Contact实体描述了ContactID,FirstName,LastName和Title这些事情。这些对应于表的列。
导航属性指向了关联实体。Contact实体有个Addresses属性,它可以使得应用程序从一个Contact导航到一个与Contact相关的Address的集合。Address实体带有一个Contact属性,允许你从Address导航到与之关联的单个Contact实体。
连接相关实体的线表示关联,它是实体间的关系。注意关联结束的位置,在图2-3中是离Contact.LastName和Address.StateProvince最近,这点没有特殊意义。关联只是连接的实体,而没有暗指哪些特定的属性。
1 导航与关联:什么对什么?
2 关系的两端经常用缩写的语法定义每一端对应多少实体来描述。这个用于描述每一端的多重性。多重性也就是众所周知的关系基数,尽管你可能在实体框架里不太常见到这个术语。
3 多重性有如下选择:
4 1(一个)
5 *(多个)
6 0..1(零或一个)
7 这两端合起来描述该关系。
8 例如“1:*”指的是“一对多”。一个典型的一对多的例子是一个订单和它的众多的明细项。
9 “0..1:*”指的的“零或一对多”。这种关系类型的一个例子就是发货方与订单之间的关系。一个发货方可以托运多个订单,但是只能有一个发货方与一个订单关联。然而,可能有在一开始情况下没有为订单分配发货方的情况;因此在关系的发货方一端它可以是0或者1.
注:注意这个实体既有标量属性ContactID也有由ContactID所引用的指向Contact实体的导航属性。如果你一直在使用实体框架的上一版本,存在外键(ContactID)这点是新加的。它是可选的,默认是保有的。本章随后你会了解更多有关这的内容。
当使用实体设计器时,你能看到在Visual Studio IDE的属性窗口中的更多有关容器、每个实体和每个实体属性的信息。
实体容器属性
在一个模型中实体的逻辑分组叫做实体容器。
图2-4显示了实体容器的属性窗口,部分属性未展开。在这里你可以修改容器的名字以及它的名称空间,定义模型的多元化规则等等。
图2-4 实体容器的属性窗口
实体属性
EDM的每个实体和关联以及模型本身,都有属性。让我们看下你所创建的模型里的Contact实体的一些属性。
选择Contact实体查看它的属性窗口(参见图2-5).
图2-5 查看Contact实体的属性窗口
在属性窗口中,你能看到实体不仅具有名字“Contact”,这个是从数据库的表名演绎而来,而且也有一个实体集合名字(Entity Set Name)的属性。如果数据库里的表名已经是复数了,例如Contacts,向导会仍然把实体命名为Contact因为实体的名字应该是单数。
实体集是某一单一类型的实体集合的容器。因此,名字为“Contacts”的实体集会包含Contact实体的一个集合。默认情况下,当创建实体集名字时,向导会对实体名做单复数处理。你可以改变这种行为,通过取消勾选实体数据模型向导中的“Pluralize or singularize generated object names”(确定所生成对象名称的单复数形式)复选框。
实体属性的属性
图2-6显示了Contact的FirstName属性的属性。比如,你可以看到FirstName是一个字符串(Type是String),不能为Null(空)(Nullable为False)。
图2-6 FirstName属性的属性
注:属性描述了一个实体属性的模式,比如Fixed Length(固定长度),也常称作attributes(属性).因为“属性的属性”讨论起来容易让人犯晕,所以我比较频繁使用的是attribute。
Unicode,Max Length和Fixed Length属性在实体框架运行时会被忽略。不要期望实体框架能够自动地基于这些属性来校验。这些属性由其它的EDM使用者来用,比如ASP.NET MVC 2.0和ASP.NET Dynamic Data Controls(ASP.NET动态数据控件),以及在第25章与StoreGeneratedPattern属性一起产生数据库的脚本。你自己也可以在低级的实体框架使用中使用它们,例如在第21章将学到的使用MetadataWorkspace.
虽然使用设计器你可以做很多事,但是到了该以原始格式打开模型的时候了。在附录C你可以发现有关原始XML的额外讨论。请确保在继续学习之前保存好你的全部工作。
图2-7 实体框架的模型元数据的构件
注:当第25章里在设计器里从头开始构建一个模型时,你将了解到更多的使用实体、它们的属性,关联以及更多的不同的特性。
注意:本文章翻译仓促未做审校。
上一页 下一页