Schema 元素 (SSDL)
以存储架构定义语言 (SSDL) 表示的 Schema 元素是存储模型定义的根元素。 它包括构成存储模型的对象、函数和容器的定义。
Schema 元素可能包含下面的零个或多个子元素:
Schema 元素使用 Namespace 特性为存储模型中的实体类型和关联对象定义命名空间。 在命名空间内,任何两个对象都不能同名。
存储模型命名空间与 Schema 元素的 XML 命名空间不同。 存储模型命名空间(由 Namespace 特性定义)是实体类型和关联类型的逻辑容器。 Schema 元素的 XML 命名空间(由 xmlns 特性指示)是用于 Schema 元素的子对象和特性的默认命名空间。 格式为 https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl(其中 YYYY 和 MM 分别表示年度和月份)的 XML 命名空间是为 SSDL 保留的。 自定义元素和特性不能位于具有此格式的命名空间中。
适用的特性
下表介绍可应用于 Schema 元素的特性。
特性名称 | 是否必需 | 值 |
---|---|---|
Namespace |
是 |
存储模型的命名空间。 Namespace 特性的值用于构成类型的完全限定名称。 例如,如果名为 Customer 的 EntityType 位于 ExampleModel.Store 命名空间中,则 EntityType 的完全限定名称为 ExampleModel.Store.Customer。 不能将下面的字符串用作 Namespace 特性的值:System、Transient 或 Edm。 Namespace 特性的值不能与 CSDL Schema 元素中 Namespace 特性的值相同。 |
Alias |
否 |
用于取代命名空间名称的标识符。 例如,如果名为 Customer 的 EntityType 位于 ExampleModel.Store 命名空间中并且 Alias 特性的值为 StorageModel,则可以将 StorageModel.Customer 用作 EntityType 的完全限定名称。 |
Provider |
是 |
数据提供程序。 有关更多信息,请参见实体框架数据提供程序。 |
ProviderManifestToken |
是 |
一个标记,该标记指示提供程序清单返回到的提供程序。 没有为该标记定义格式。 标记的值由提供程序定义。 有关 SQL Server 提供程序清单标记的信息,请参见用于实体框架的 SQL Server .NET Framework 数据提供程序 (SqlClient)。 |
示例
下面的示例显示了一个 Schema 元素,它包含一个 EntityContainer 元素、两个 EntityType 元素以及一个 Association 元素。
<Schema Namespace="ExampleModel.Store"
Alias="Self" Provider="System.Data.SqlClient"
ProviderManifestToken="2008"
xmlns="https://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="ExampleModelStoreContainer">
<EntitySet Name="Customers"
EntityType="ExampleModel.Store.Customers"
Schema="dbo" />
<EntitySet Name="Orders"
EntityType="ExampleModel.Store.Orders"
Schema="dbo" />
<AssociationSet Name="FK_CustomerOrders"
Association="ExampleModel.Store.FK_CustomerOrders">
<End Role="Customers" EntitySet="Customers" />
<End Role="Orders" EntitySet="Orders" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Customers">
<Documentation>
<Summary>Summary here.</Summary>
<LongDescription>Long description here.</LongDescription>
</Documentation>
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Name="CustomerId" Type="int" Nullable="false" />
<Property Name="Name" Type="nvarchar(max)" Nullable="false" />
</EntityType>
<EntityType Name="Orders" xmlns:c="http://CustomNamespace">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="int" Nullable="false"
c:CustomAttribute="someValue"/>
<Property Name="ProductId" Type="int" Nullable="false" />
<Property Name="Quantity" Type="int" Nullable="false" />
<Property Name="CustomerId" Type="int" Nullable="false" />
<c:CustomElement>
Custom data here.
</c:CustomElement>
</EntityType>
<Association Name="FK_CustomerOrders">
<End Role="Customers"
Type="ExampleModel.Store.Customers" Multiplicity="1">
<OnDelete Action="Cascade" />
</End>
<End Role="Orders"
Type="ExampleModel.Store.Orders" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customers">
<PropertyRef Name="CustomerId" />
</Principal>
<Dependent Role="Orders">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
<Function Name="UpdateOrderQuantity"
Aggregate="false"
BuiltIn="false"
NiladicFunction="false"
IsComposable="false"
ParameterTypeSemantics="AllowImplicitConversion"
Schema="dbo">
<Parameter Name="orderId" Type="int" Mode="In" />
<Parameter Name="newQuantity" Type="int" Mode="In" />
</Function>
<Function Name="UpdateProductInOrder" IsComposable="false">
<CommandText>
UPDATE Orders
SET ProductId = @productId
WHERE OrderId = @orderId;
</CommandText>
<Parameter Name="productId"
Mode="In"
Type="int"/>
<Parameter Name="orderId"
Mode="In"
Type="int"/>
</Function>
</Schema>