zoukankan      html  css  js  c++  java
  • [实体框架编程] 第二章 探讨实体数据模型(二)

    实体设计器窗口对于查看一个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章里在设计器里从头开始构建一个模型时,你将了解到更多的使用实体、它们的属性,关联以及更多的不同的特性。

     

     

    注意:本文章翻译仓促未做审校。

     

    上一页    下一页

     

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/xcf007/p/2566177.html
Copyright © 2011-2022 走看看