属性(实体数据模型)
**“属性”是实体类型和复杂类型的基本构造块。 属性定义了实体类型实例或复杂类型实例要包含的数据的形状和特征。 概念模型中的属性类似于为类定义的属性。 与类的属性定义了类的形状并携带了有关对象的信息相同,概念模型中的属性定义了实体类型的形状并携带了有关实体类型实例的信息。
注意: |
---|
本主题中描述的属性不同于导航属性。有关更多信息,请参见导航属性。 |
属性定义包含以下信息:
属性名。 (必需)
属性类型。 (必需)
一组方面。 (可选)
属性可以包含基元数据(例如字符串、整数或布尔值)或结构化数据(例如复杂类型)。 基元类型的属性也称为标量属性。 有关更多信息,请参见实体数据模型:基元数据类型。
注意: |
---|
复杂类型本身可以具有复杂类型的属性。 |
示例
下图显示了一个具有三个实体类型的概念模型:Book、Publisher 和 Author。 每个实体类型具有多个属性,但图中没有传达每个属性的类型信息。 充当实体键的属性用 (Key) 标示出来。
ADO.NET Entity Framework使用一种称为概念架构定义语言 (CSDL) 的域特定语言 (DSL) 来定义概念模型。 下面的 CSDL 定义了 Book 实体类型(如上图所示)并使用 XML 特性表明了每个属性的类型和名称。 此外,还使用 XML 特性定义了一个可选方面 Nullable。
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
图中所示的其中一个属性还可以是复杂类型属性。 例如,Publisher 实体类型的 Address 属性可以是由多个标量属性(例如 StreetAddress、City、StateOrProvince、Country 和 PostalCode)构成的复杂类型属性。 这种复杂类型的 CSDL 表示方式如下所示:
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>