批注元素 (CSDL)

以概念架构定义语言 (CSDL) 表示的批注元素是概念模型中的自定义 XML 元素。除了具有有效的 XML 结构之外,还必须满足批注元素的以下各项条件:

  • 批注元素不能位于为 CSDL 保留的任何 XML 命名空间中。

  • 多个批注元素可能是某个给定 CSDL 元素的子元素。

  • 任何两个批注元素的完全限定名称都不能相同。

  • 批注元素必须出现在给定 CSDL 元素的所有其他子元素之后。

可以使用批注元素提供有关概念模型中元素的额外元数据。从 .NET Framework 版本 4 开始,可以在运行时通过使用 System.Data.Metadata.Edm 命名空间中的类访问批注元素中包含的元数据。

示例

下面的示例演示一个具有一个批注元素 (CustomElement) 的 EntityType 元素。本示例还演示了一个应用于实体类型元素的批注特性。有关更多信息,请参见批注特性 (CSDL)

<Schema Namespace="SchoolModel" Alias="Self"
        xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
        xmlns="https://schemas.microsoft.com/ado/2008/09/edm">
  <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
    <EntitySet Name="People" EntityType="SchoolModel.Person" />
  </EntityContainer>
  <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
              p:CustomAttribute="Data here.">
    <Key>
      <PropertyRef Name="PersonID" />
    </Key>
    <Property Name="PersonID" Type="Int32" Nullable="false"
              annotation:StoreGeneratedPattern="Identity" />
    <Property Name="LastName" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
    <Property Name="FirstName" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
    <Property Name="HireDate" Type="DateTime" />
    <Property Name="EnrollmentDate" Type="DateTime" />
    <p:CustomElement>
      Custom metadata.
    </p:CustomElement>
  </EntityType>
</Schema>

下面的代码检索批注元素中的元数据并将其写入控制台:

Dim collection As New EdmItemCollection("School.csdl")
Dim workspace As New MetadataWorkspace()
workspace.RegisterItemCollection(collection)
Dim contentType As EdmType
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, contentType)
If contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement") Then
    Dim annotationProperty As MetadataProperty = _
        contentType.MetadataProperties("http://CustomNamespace.com:CustomElement")
    Dim annotationValue As Object = annotationProperty.Value
    Console.WriteLine(annotationValue.ToString())
End If
EdmItemCollection collection = new EdmItemCollection("School.csdl");
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
{
    MetadataProperty annotationProperty =
        contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
    object annotationValue = annotationProperty.Value;
    Console.WriteLine(annotationValue.ToString());
}

上面的代码假定 School.csdl 文件位于项目的输出目录中并且您已将下面的 Imports 和 Using 语句添加到项目中:

Imports System.Data.Metadata.Edm
using System.Data.Metadata.Edm;

请参阅

概念

批注特性 (CSDL)

CSDL 规范

其他资源

CSDL、SSDL 和 MSL 规范