Schema 元素 (CSDL)
Schema 元素是概念模型定义的根元素。 它包括构成概念模型的对象、函数和容器的定义。
Schema 元素可能包含下面的零个或多个子元素:
Schema 元素可能包含零个或一个批注元素。
注意: |
---|
Function 元素和批注元素只能用在面向 .NET Framework 版本 4 或更高版本的应用程序的概念模型中。此类模型的 XML 命名空间为 https://schemas.microsoft.com/ado/2008/09/edm。 |
Schema 元素使用 Namespace 特性为概念模型中的实体类型、复杂类型和关联对象定义命名空间。 在命名空间内,任何两个对象都不能同名。 命名空间可以跨多个 Schema 元素和多个 .csdl 文件。
概念模型命名空间与 Schema 元素的 XML 命名空间不同。 概念模型命名空间(由 Namespace 特性定义)是实体类型、复杂类型和关联类型的逻辑容器。 Schema 元素的 XML 命名空间(由 xmlns 特性指示)是用于 Schema 元素的子对象和特性的默认命名空间。 格式为 https://schemas.microsoft.com/ado/YYYY/MM/edm(其中,YYYY 和 MM 分别表示年度和月份)的 XML 命名空间是为 CSDL 保留的。 自定义元素和特性不能位于具有此格式的命名空间中。
适用的特性
下表介绍可应用于 Schema 元素的特性。
特性名称 | 是否必需 | 值 |
---|---|---|
Namespace |
是 |
概念模型的命名空间。 Namespace 特性的值用于构成类型的完全限定名称。 例如,如果名为 Customer 的 EntityType 位于 Simple.Example.Model 命名空间中,则 EntityType 的完全限定名称为 SimpleExampleModel.Customer。 不能将下面的字符串用作 Namespace 特性的值:System、Transient 或 Edm。 Namespace 特性的值不能与 SSDL Schema 元素中 Namespace 特性的值相同。 |
Alias |
否 |
用于取代命名空间名称的标识符。 例如,如果名为 Customer 的 EntityType 位于 Simple.Example.Model 命名空间中,而 Alias 特性的值为 Model,则可以将 Model.Customer 用作 EntityType 的完全限定名称。 |
注意: |
---|
可以将任何数量的批注特性(自定义 XML 特性)应用于 Schema 元素。然而,自定义特性可能不属于为 CSDL 保留的任何 XML 命名空间。任何两个自定义特性的完全限定名称都不能相同。 |
示例
下面的示例显示了一个 Schema 元素,它包含一个 EntityContainer 元素、两个 EntityType 元素以及一个 Association 元素。
<Schema xmlns="https://schemas.microsoft.com/ado/2008/09/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
Namespace="ExampleModel" Alias="Self">
<EntityContainer Name="ExampleModelContainer">
<EntitySet Name="Customers"
EntityType="ExampleModel.Customer" />
<EntitySet Name="Orders" EntityType="ExampleModel.Order" />
<AssociationSet
Name="CustomerOrder"
Association="ExampleModel.CustomerOrders">
<End Role="Customer" EntitySet="Customers" />
<End Role="Order" EntitySet="Orders" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<NavigationProperty
Name="Orders"
Relationship="ExampleModel.CustomerOrders"
FromRole="Customer" ToRole="Order" />
</EntityType>
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Type="Int32" Name="OrderId" Nullable="false" />
<Property Type="Int32" Name="ProductId" Nullable="false" />
<Property Type="Int32" Name="Quantity" Nullable="false" />
<NavigationProperty
Name="Customer"
Relationship="ExampleModel.CustomerOrders"
FromRole="Order" ToRole="Customer" />
<Property Type="Int32" Name="CustomerId" Nullable="false" />
</EntityType>
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer"
Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order"
Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="CustomerId" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>