Anmerkungelemente (CSDL)
Anmerkungselemente in konzeptioneller Schemadefinitionssprache (CSDL) sind benutzerdefinierte XML-Elemente im konzeptionellen Modell.Neben dem Vorhandensein einer gültigen XML-Struktur muss für Anmerkungselemente Folgendes zutreffen:
Anmerkungselemente dürfen sich in keinem XML-Namespace befinden, der für CSDL reserviert ist.
Mehrere Anmerkungselemente können untergeordnete Elemente eines angegebenen CSDL-Elements sein.
Die vollqualifizierten Namen zweier Anmerkungselemente dürfen nicht übereinstimmen.
Anmerkungselemente müssen nach allen anderen untergeordneten Elementen eines angegebenen CSDL-Elements angezeigt werden.
Anmerkungselemente können verwendet werden, um zusätzliche Metadaten für die Elemente in einem konzeptionellen Modell bereitzustellen.Seit .NET Framework, Version 4, kann auf in Anmerkungselementen enthaltene Metadaten zur Laufzeit mithilfe von Klassen im System.Data.Metadata.Edm-Namespace zugegriffen werden.
Beispiel
Das folgende Beispiel zeigt ein EntityType-Element mit einem Anmerkungselement (CustomElement):Das Beispiel zeigt außerdem ein Anmerkungsattribut, das auf das Entitätstypelement angewendet wird.Weitere Informationen finden Sie unter Anmerkungsattribute (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>
Im folgenden Code werden die Metadaten im Anmerkungselement abgerufen und in die Konsole geschrieben:
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());
}
Im Code oben wird davon ausgegangen, dass sich die Datei School.csdl im Ausgabeverzeichnis des Projekts befindet, und dass Sie dem Projekt die folgenden Imports- und Using-Anweisungen hinzugefügt haben:
Imports System.Data.Metadata.Edm
using System.Data.Metadata.Edm;