annotation 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の annotation 要素は、概念モデルのカスタム XML 要素です。 有効な XML 構造が必要であることに加え、annotation 要素は次の条件も満たしている必要があります。
annotation 要素は、CSDL 用に予約された XML 名前空間内に存在できません。
More than one annotation element may be a child of a given CSDL element.
2 つの annotation 要素の完全修飾名を同じにすることはできません。
Annotation elements must appear after all other child elements of a given CSDL element.
annotation 要素は、概念モデルの要素に関する追加のメタデータを提供するために使用できます。 .NET Framework Version 4 以降では、annotation 要素に含まれるメタデータに、System.Data.Metadata.Edm 名前空間内のクラスを使用して実行時にアクセスできます。
例
次の例は、annotation 要素 (CustomElement) を持つ EntityType 要素を示しています。 また、エンティティ型の要素に適用される annotation 属性も示しています。 詳細については、「annotation 属性 (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>
次のコードは、annotation 要素内のメタデータを取得してコンソールに出力します。
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;