CSDL-Spezifikation
Hinweis
CSDL v1 wird nicht unterstützt, aktualisieren Sie bitte auf V3.
Die konzeptionelle Schemadefinitionssprache (CSDL) ist eine XML-basierte Sprache, die die Entitäten, Beziehungen und Funktionen beschreibt, die ein konzeptionelles Modell einer datengesteuerten Anwendung bilden. Dieses konzeptionelle Modell kann vom Entity Framework oder WCF Data Services verwendet werden. Die Metadaten, die in CSDL beschrieben werden, werden von Entity Framework verwendet, um Entitäten und Beziehungen zuzuordnen, die in einem konzeptionellen Modell für eine Datenquelle definiert werden. Weitere Informationen finden Sie unter SSDL-Spezifikation und MSL-Spezifikation.
CSDL ist die Entity Framework-Implementierung des Entity Data Model.
In einer Entity Framework-Anwendung werden konzeptionelle Modellmetadaten aus einer CSDL-Datei (in CSDL geschrieben) in eine Instanz der System.Data.Metadata.Edm.EdmItemCollection geladen und können mithilfe von Methoden in der System.Data.Metadata.Edm.MetadataWorkspace-Klasse verwendet werden. Entity Framework verwendet Metadaten des konzeptionellen Modells, um Abfragen für das konzeptionelle Modell in datenquellenspezifische Befehle zu übersetzen.
Der EF Designer speichert konzeptionelle Modellinformationen zur Entwurfszeit in einer EDMX-Datei. Zur Erstellungszeit verwendet der Entity Designer die in einer EDMX-Datei gespeicherten Informationen, um die SSDL-Datei zu erstellen, die zur Laufzeit vom Entity Framework benötigt wird.
Die verschiedenen Versionen von CSDL werden von XML-Namespaces unterschieden.
CSDL-Version | XML-Namespace |
---|---|
CSDL v1 | https://schemas.microsoft.com/ado/2006/04/edm |
CSDL v2 | https://schemas.microsoft.com/ado/2008/09/edm |
CSDL v3 | https://schemas.microsoft.com/ado/2009/11/edm |
Zuordnungselement (CSDL)
Ein Association-Element definiert eine Beziehung zwischen zwei Entitätstypen. Eine Zuordnung muss die Entitätstypen, die in der Beziehung enthalten sind, und die mögliche Anzahl von Entitätstypen an den Enden der Beziehung angeben, die auch als Multiplizität bezeichnet wird. Die Multiplizität eines Zuordnungsendes kann über einen Wert von eins (1), null oder eins (0..1) oder n (*) verfügen. Diese Informationen werden in zwei untergeordneten End-Elementen angegeben.
Auf Entitätstypinstanzen an einem Ende einer Zuordnung kann über Navigationseigenschaften oder Fremdschlüssel zugegriffen werden, sofern sie für einen Entitätstyp verfügbar gemacht werden.
In einer Anwendung stellt eine Instanz einer Zuordnung eine bestimmte Zuordnung zwischen Instanzen von Entitätstypen dar. Zuordnungsinstanzen werden logisch in einem Zuordnungssatz gruppiert.
Das Association-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- Ende (genau 2 Elemente)
- ReferentialConstraint (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Association-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Zuordnung. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Association-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein Association-Element, das die Zuordnung CustomerOrders definiert, wenn Fremdschlüssel für die Customer- und Order-Entitätstypen nicht verfügbar gemacht wurden. Die Multiplikationswerte für jedes Ende der Zuordnung geben an, dass viele Bestellungen einem Kundenzugeordnet werden können, aber nur ein Kunde kann einer Bestellung zugeordnet werden. Darüber hinaus gibt das OnDelete-Element an, dass alle Bestellungen, die mit einem bestimmten Kunden zusammenhängen und in den ObjectContext geladen wurden, gelöscht werden, wenn der Kunde gelöscht wird.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
Das folgende Beispiel zeigt ein Association-Element, das die CustomerOrders-Zuordnung definiert, wenn Fremdschlüssel für die Customer- und Order-Entitätstypen verfügbar gemacht wurden. Bei verfügbar gemachten Fremdschlüsseln wird die Beziehung zwischen den Entitäten mit einem ReferentialConstraint-Element verwaltet. Ein entsprechendes AssociationSetMapping-Element ist zur Zuordnung dieser Zuweisung zur Datenquelle nicht erforderlich.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
AssociationSet-Element (CSDL)
Das AssociationSet-Element in der konzeptionellen Schemadefinitionssprache (CSDL) ist ein logischer Container für Zuordnungsinstanzen desselben Typs. Ein Zuordnungssatz stellt eine Definition zum Gruppieren von Zuordnungsinstanzen bereit, sodass sie einer Datenquelle zugeordnet werden können.
Ein AssociationSet-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element zugelassen)
- Ende (genau zwei Elemente erforderlich)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Das Association-Attribut gibt den Zuordnungstyp an, den ein Zuordnungssatz enthält. Die Entitätssätze, welche die Enden eines Zuordnungssatzes bilden, werden genau mit zwei untergeordneten End-Elementen angegeben.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das AssociationSet-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätssatzes. Der Wert des Name-Attributs darf nicht mit dem Wert des Association-Attributs übereinstimmen. |
Zuordnung | Ja | Der vollqualifizierte Name der Zuordnung, von der der Zuordnungssatz Instanzen enthält. Die Zuordnung muss sich im gleichen Namespace wie der Zuordnungssatz befinden. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das AssociationSet-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EntityContainer-Element mit zwei AssociationSet-Elementen:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
CollectionType-Element (CSDL)
Das CollectionType-Element in konzeptioneller Schemadefinitionssprache (CSDL) gibt an, dass ein Funktionsparameter oder ein Funktionsrückgabetyp eine Auflistung ist. Das CollectionType-Element kann ein untergeordnetes Element des Parameter-Elements oder des ReturnType (Function)-Elements sein. Der Typ der Auflistung kann entweder mit dem Type-Attribut oder einem der folgenden untergeordneten Elemente angegeben werden:
- CollectionType
- ReferenceType
- RowType
- TypeRef
Hinweis
Ein Modell überprüft nicht, ob für den Auflistungstyp das Type-Attribut und ein untergeordnetes Element angegeben wurden.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das CollectionType-Element angewendet werden können. Beachten Sie, dass die Attribute DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode und Collation nur für Auflistungen von EDMSimpleTypes gelten.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Nein | Der Typ der Auflistung. |
NULL zulassen | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In der CSDL v1 muss eine komplexe Typeigenschaft Nullable="False" aufweisen. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Zeichenfolge mit fester Länge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalierung | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server) |
Unicode | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Unicode-Zeichenfolge gespeichert wird. |
Sortierung | Nein | Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird. |
Hinweis
Für das CollectionType-Element kann eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt eine modelldefinierte Funktion, die mithilfe eines CollectionType-Elements angibt, dass die Funktion eine Auflistung von Person-Entitätstypen (wie mit dem ElementType-Attribut angegeben) zurückgibt.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String"/>
<ReturnType>
<CollectionType ElementType="SchoolModel.Person"/>
</ReturnType>
<DefiningExpression>
SELECT VALUE p
FROM SchoolEntities.People AS p
WHERE p.LastName >= someString
</DefiningExpression>
</Function>
Das folgende Beispiel zeigt eine modelldefinierte Funktion, die mithilfe eines CollectionType-Elements angibt, dass die Funktion eine Auflistung von Zeilen (wie im RowType-Element angegeben) zurückgeben soll.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
Das folgende Beispiel zeigt eine modelldefinierte Funktion, die mithilfe des CollectionType-Elements angibt, dass die Funktion eine Auflistung von Department-Entitätstypen als Parameter akzeptiert.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
ComplexType-Element (CSDL)
Ein ComplexType-Element definiert eine Datenstruktur, die aus EdmSimpleType-Eigenschaften oder anderen komplexen Typen besteht. Ein komplexer Typ kann eine Eigenschaft eines Entitätstyps oder eines anderen komplexen Typs sein. Ein komplexer Typ entspricht einem Entitätstyp, in dem von einem komplexen Typ Daten definiert werden. Es gibt jedoch einige Hauptunterschiede zwischen komplexen Typen und Entitätstypen:
- Komplexe Typen weisen keine Identitäten (oder Schlüssel) auf und können daher nicht unabhängig sein. Komplexe Typen können nur Eigenschaften von Entitätstypen oder anderen komplexen Typen sein.
- Komplexe Typen können nicht Teil von Zuordnungen sein. Die Enden einer Zuordnung können kein komplexer Typ sein, daher können Navigationseigenschaften nicht für komplexe Typen definiert werden.
- Einer komplexen Typeigenschaft kann kein NULL-Wert zugewiesen werden, obwohl jede skalare Eigenschaft eines komplexen Typs auf NULL festgelegt werden kann.
Ein ComplexType-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element)
- Eigenschaft (kein oder mehr Elemente)
- Anmerkungselemente (kein oder mehrere Elemente)
In der folgenden Tabelle werden die Attribute beschrieben, die für das ComplexType-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des komplexen Typs. Der Name eines komplexen Typs darf nicht dem Namen anderer komplexer Typen, Entitätstypen oder Zuordnungen entsprechen, die sich innerhalb des Bereichs des Modells befinden. |
BaseType | Nein | Der Name eines anderen komplexen Typs, der der Basistyp des zu definierenden komplexen Typs ist. [!NOTE] |
> Dieses Attribut ist in CSDL v1 nicht anwendbar. Für komplexe Typen wird Vererbung in dieser Version nicht unterstützt. | ||
Zusammenfassung | Nein | (Der Standardwert) Wahr oder Falsch, ist abhängig davon, ob der komplexe Typ ein abstrakter Typ ist oder nicht. [!NOTE] |
> Dieses Attribut ist in CSDL v1 nicht anwendbar. Komplexe Typen in dieser Version können keine abstrakten Typen sein. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das ComplexType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt einen komplexen Typ, Address, mit den EdmSimpleType-Eigenschaften StreetAddress, City, StateOrProvince, Country und PostalCode.
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Deklarieren Sie den Eigenschaftentyp Address in der Entitätstypdefinition, um den komplexen Typ (oben) als Eigenschaft eines Entitätstyps zu definieren. Das folgende Beispiel zeigt die Address-Eigenschaft als komplexen Typ für einen Entitätstyp (Publisher):
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BooksModel.Address" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
DefiningExpression-Element (CSDL)
Das DefineExpression-Element in der konzeptionellen Schemadefinitionssprache (CSDL) enthält einen Entity SQL-Ausdruck, der eine Funktion im konzeptionellen Modell definiert.
Hinweis
Zu Überprüfungszwecken kann ein DefiningExpression-Element beliebige Inhalte enthalten. Entity Framework löst jedoch zur Laufzeit eine Ausnahme aus, wenn ein DefiningExpression-Element keine gültige Entity SQL enthält.
Anwendbare Attribute
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das DefiningExpression-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird mithilfe eines DefiningExpression-Elements eine Funktion definiert, die den Zeitraum seit der Veröffentlichung eines Buchs in Jahren zurückgibt. Der Inhalt des DefiningExpression-Elements wird in Entity SQL geschrieben.
<Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
Dependent-Element (CSDL)
Das Dependent-Element in konzeptioneller Schemadefinitionssprache (CSDL) ist ein dem ReferentialConstraint-Element untergeordnetes Element und definiert das abhängige Ende einer referenziellen Einschränkung. Ein ReferentialConstraint-Element definiert Funktionen, die einer Einschränkung der referenziellen Integrität in einer relationalen Datenbank ähnlich sind. So wie eine Spalte (oder Spalten) einer Datenbanktabelle auf den Primärschlüssel einer anderen Tabelle verweisen kann, kann eine Eigenschaft (oder Eigenschaften) eines Entitätstyps auf den Entitätsschlüssel eines anderen Entitätstyps verweisen. Der Entitätstyp, auf den verwiesen wird, wird als Prinzipalende der Einschränkung bezeichnet. Der Entitätstyp, der auf das Prinzipalende verweist, wird als abhängiges Ende der Einschränkung bezeichnet. PropertyRef-Elemente werden verwendet, um anzugeben, welche Schlüssel auf das Prinzipalende verweisen.
Ein Dependent-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- PropertyRef (ein oder mehrere Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Dependent-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Rolle | Ja | Der Name des Entitätstyps am abhängigen Ende der Zuordnung. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Dependent-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein ReferentialConstraint-Element, das als Teil der Definition der PublishedBy-Zuordnung verwendet wird. Die PublisherId-Eigenschaft des Entitätstyps Book stellt das abhängige Ende der referenziellen Einschränkung dar.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Documentation-Element (CSDL)
Das Documentation-Element in konzeptioneller Schemadefinitionssprache (CSDL) kann verwendet werden, um Informationen zu einem Objekt bereitzustellen, das in einem übergeordneten Element definiert ist. Ist in einer EDMX-Datei das Documentation-Element ein untergeordnetes Element eines anderen Elements, das als Objekt auf der Entwurfsoberfläche von EF Designer (z. B. als Entität, Zuordnung oder Eigenschaft) angezeigt wird, wird der Inhalt des Documentation-Elements im Properties-Fenster von Visual Studio für das Objekt angezeigt.
Ein Documentation-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Summary: eine kurze Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
- LongDescription: Eine ausführliche Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
- Anmerkungselemente. (keine (Null) oder mehrere Elemente)
Anwendbare Attribute
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Documentation-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt das Documentation-Element als untergeordnetes Element eines EntityType-Elements. Wenn sich der folgende Codeausschnitt im CSDL-Inhalt einer EDMX-Datei befindet, werden die Inhalte der Elemente Summary und LongDescription im Fenster Properties von Visual Studio angezeigt, wenn Sie auf den Entitätstyp Customer
klicken.
<EntityType Name="Customer">
<Documentation>
<Summary>Summary here.</Summary>
<LongDescription>Long description here.</LongDescription>
</Documentation>
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
</EntityType>
End-Element (CSDL)
Das End-Element kann in konzeptioneller Schemadefinitionssprache (CSDL) ein untergeordnetes Element des Association-Elements oder des AssociationSet-Elements sein. In beiden Fällen unterscheiden sich die Rolle und die anwendbaren Attribute des End-Elements.
Das End-Element als untergeordnetes Objekt des Association-Elements
Ein End-Element (als untergeordnetes Element des Association-Elements) identifiziert an einem Ende einer Zuordnung den Entitätstyp und die Anzahl der Entitätstypinstanzen, die an diesem Ende einer Zuordnung existieren können. Zuordnungsenden werden als Teil einer Zuordnung definiert. Eine Zuordnung muss genau zwei Zuordnungsenden aufweisen. Auf Entitätstypinstanzen an einem Ende einer Zuordnung kann über Navigationseigenschaften oder Fremdschlüssel zugegriffen werden, sofern sie für einen Entitätstyp verfügbar gemacht werden.
Ein End-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- OnDelete (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das End-Element übernommen werden können, wenn es sich dabei um das untergeordnete Element eines Association-Elements handelt.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Ja | Der Name des Entitätstyps an einem Ende der Zuordnung. |
Rolle | Nein | Der Name für das Zuordnungsende. Wird kein Name angegeben, wird der Name des Entitätstyps am Zuordnungsende verwendet. |
Multiplizität | Ja | 1, 0..1 oder *, abhängig von der Anzahl der Entitätstypinstanzen am Ende der Zuordnung. 1 gibt an, dass genau eine Entitätstypinstanz am Zuordnungsende vorhanden ist. 0..1 gibt an, dass keine oder eine Entitätstypinstanz am Zuordnungsende vorhanden ist. * gibt an, dass keine, eine oder mehrere Entitätstypinstanz/en am Zuordnungsende vorhanden ist/sind. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das End-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein Association-Element, das die CustomerOrders-Zuordnung definiert. Die Multiplikationswerte für jedes Ende der Zuordnung geben an, dass viele Bestellungen einem Kundenzugeordnet werden können, aber nur ein Kunde kann einer Bestellung zugeordnet werden. Darüber hinaus gibt das OnDelete-Element an, dass alle Orders, die mit einem bestimmten Customer zusammenhängen und in den ObjectContext geladen wurden, gelöscht werden, wenn der Customer gelöscht wird.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
<OnDelete Action="Cascade" />
</End>
</Association>
Das End-Element als untergeordnetes Objekt des AssociationSet-Elements
Das End-Element gibt ein Ende des Zuordnungssatzes an. Das AssociationSet-Element muss zwei End-Elemente enthalten. Die in einem End-Element enthaltenen Informationen werden beim Zuordnen eines Zuordnungssatzes zu einer Datenquelle verwendet.
Ein End-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Hinweis
Anmerkungselemente müssen an alle anderen untergeordneten Elemente angereiht werden. Anmerkungselemente sind nur in CSDL v2 und höher zulässig.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das End-Element übernommen werden können, wenn es sich dabei um das untergeordnete Element eines AssociationSet-Elements handelt.
Attributname | Ist erforderlich | Wert |
---|---|---|
EntitySet | Ja | Der Name des EntitySet-Elements, das ein Ende des übergeordneten AssociationSet-Elements definiert. Das EntitySet-Element muss im gleichen Entitätscontainer wie das übergeordnete AssociationSet-Element definiert werden. |
Rolle | Nein | Der Name des Endes des Zuordnungssatzes. Wird das Role-Attribut nicht verwendet, ist der Name des Zuordnungssatzendes der Name des Entitätssatzes. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das End-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EntityContainer-Element mit zwei AssociationSet-Elementen, jeweils mit zwei End-Elementen:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntityContainer-Element (CSDL)
Das EntityContainer-Element in konzeptioneller Schemadefinitionssprache (CSDL) ist ein logischer Container für Entitätssätze, Zuordnungssätze und Funktionsimporte. Durch das EntityContainerMapping-Element wird einem Speichermodell-Entitätscontainer ein konzeptioneller Modellentitätscontainer zugeordnet. Ein Speichermodell-Entitätscontainer beschreibt die Struktur der Datenbank: Entitätssätze beschreiben Tabellen, Zuordnungssätze beschreiben Fremdschlüsseleinschränkungen, und Funktionsimporte beschreiben gespeicherte Prozeduren in einer Datenbank.
Ein EntityContainer-Element kann kein oder ein Dokumentationselement aufweisen. Wenn ein Documentation-Element vorhanden ist, muss es allen EntitySet-, AssociationSet- und FunctionImport-Elementen vorangestellt sein.
Ein EntityContainer-Element kann über keines oder mehrere der folgenden untergeordneten Elemente verfügen (der vorliegenden Reihenfolge entsprechend):
- EntitySet
- AssociationSet
- FunctionImport
- Anmerkungselemente
Sie können ein EntityContainer-Element erweitern, um den Inhalt eines anderen EntityContainers einzuschließen, der sich im selben Namespace befindet. Um den Inhalt eines anderen EntityContainers einzuschließen, legen Sie im verweisenden EntityContainer-Element den Wert des Extends-Attributs auf den Namen des EntityContainer-Elements fest, das Sie einbeziehen möchten. Alle untergeordneten Elemente des enthaltenen EntityContainer-Elements werden als untergeordnete Elemente des verweisenden EntityContainer-Elements behandelt.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Using-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätscontainers. |
Extends | Nein | Der Name eines anderen Entitätscontainers innerhalb des gleichen Namespaces. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das EntityContainer-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird ein EntityContainer-Element dargestellt, das drei Entitätenmengen und zwei Zuordnungssätze definiert.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntitySet-Element (CSDL)
Das EntitySet-Element in konzeptioneller Schemadefinitionssprache ist ein logischer Container für Instanzen eines Entitätstyps und Instanzen beliebiger von diesem Entitätstyp abgeleiteter Typen. Die Beziehung zwischen einem Entitätstyp und einem Entitätssatz ist zur Beziehung zwischen einer Zeile und einer Tabelle in einer relationalen Datenbank analog. Wie eine Zeile definiert ein Entitätstyp einen Satz verknüpfter Daten, und ebenso wie eine Tabelle enthält ein Entitätssatz Instanzen dieser Definition. Ein Entitätssatz stellt ein Konstrukt zum Gruppieren von Entitätstypinstanzen bereit, damit diese verwandten Datenstrukturen in einer Datenquelle zugeordnet werden können.
Für einen bestimmten Entitätstyp kann mindestens ein Entitätssatz definiert werden.
Hinweis
Der EF Designer unterstützt keine konzeptionellen Modelle, die mehrere Entitätssätze pro Typ enthalten.
Ein EntitySet-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element zugelassen)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das EntitySet-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätssatzes. |
EntityType | Ja | Der vollqualifizierte Name des Entitätstyps, für den der Entitätssatz Instanzen enthält. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das EntitySet-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EntityContainer-Element mit drei EntitySet-Elementen:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Pro Typ (MEST) können mehrere Entitätssätze definiert werden. Im folgenden Beispiel wird ein Entitätscontainer mit zwei Entitätssätzen für den Entitätstyp Book definiert:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntityType-Element (CSDL)
Das EntityType-Element stellt in einem konzeptionellen Modell die Struktur eines Konzepts auf der obersten Ebene dar. Ein Entitätstyp ist eine Vorlage für Instanzen von Entitätstypen in einer Anwendung. Jede Vorlage enthält die folgenden Informationen:
- Eine eindeutige Bezeichnung. (Erforderlich.)
- Ein Entitätsschlüssel, der von einem oder mehreren Eigenschaften definiert wird. (Erforderlich.)
- Eigenschaften für enthaltene Daten. (Optional.)
- Navigationseigenschaften, die eine Navigation von einem Ende einer Zuordnung zum anderen Ende ermöglichen. (Optional.)
In einer Anwendung stellt eine Instanz eines Entitätstyps ein spezielles Objekt dar, wie etwa einen bestimmten Kunden oder eine Bestellung. Jede Instanz eines Entitätstyps muss über einen eindeutigen Entitätsschlüssel innerhalb einer Entitätsmenge verfügen.
Zwei Instanzen eines Entitätstyps werden nur dann als gleich betrachtet, wenn sie vom selben Typ sind und die Werte ihrer Entitätsschlüssel übereinstimmen.
Ein EntityType-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element)
- Key (kein oder ein Element)
- Eigenschaft (kein oder mehr Elemente)
- NavigationProperty (kein oder mehrere Elemente)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das EntityType-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätstyps. |
BaseType | Nein | Der Name eines anderen Entitätstyps, der der Basistyp des Entitätstyps ist, der definiert wird. |
Abstract | Nein | Wahr oder Falsch, abhängig davon, ob der Entitätstyp ein abstrakter Typ ist. |
OpenType | Nein | Wahr oder Falsch, abhängig davon, ob der Entitätstyp ein offener Entitätstyp ist. [!NOTE] |
> Das OpenType-Attribut gilt nur für Entitätstypen, die in konzeptionellen Modellen definiert sind, die mit ADO.NET Data Services verwendet werden. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das EntityType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EntityType-Element mit drei Property- und zwei NavigationProperty-Elementen:
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
EnumType-Element (CSDL)
Das EnumType-Element stellt einen Aufzählungstyp dar.
Ein EnumType-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element)
- Member (kein oder mehrere Elemente)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das EnumType-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätstyps. |
IsFlags | Nein | Wahr oder Falsch, je nachdem, ob der Enumerationstyp als Satz von Flags verwendet werden kann. Der Standardwert ist Falsch. |
UnderlyingType | Nein | Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 oder Edm.SByte, der den Wertebereich des Typs definiert. Der zugrunde liegende Standardtyp von Enumerationselementen ist Edm.Int32.. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das EnumType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EnumType-Element mit drei Member-Elementen:
<EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
<Member Name="Red" />
<Member Name="Green" />
<Member Name="Blue" />
</EntityType>
Function-Element (CSDL)
Das Function-Element in konzeptioneller Schemadefinitionssprache (CSDL) wird verwendet, um Funktionen im konzeptionellen Modell zu definieren oder zu deklarieren. Eine Funktion wird mit einem DefiningExpression-Element definiert.
Ein Function-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- Parameter (kein oder mehrere Elemente)
- DefiningExpression (kein oder ein Element)
- ReturnType (Function) (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Ein Rückgabetyp für eine Funktion muss entweder mit dem ReturnType (Function)-Element oder dem ReturnType-Attribut (siehe unten) angegeben werden, aber nicht mit beiden. Die möglichen Rückgabetypen sind alle EdmSimpleType-Typen, Entitätstypen, komplexe Typen, Zeilentypen (oder eine Auflistung eines dieser Typen) oder Ref-Typen.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Function-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Funktion. |
ReturnType | Nein | Der von der Funktion zurückgegebene Typ. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Function-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird mithilfe eines Function-Elements eine Funktion definiert, die den Zeitraum seit der Einstellung eines Kursleiters in Jahren zurückgibt.
<Function Name="YearsSince" ReturnType="Edm.Int32">
<Parameter Name="date" Type="Edm.DateTime" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(date)
</DefiningExpression>
</Function>
FunctionImport-Element (CSDL)
Das FunctionImport-Element in konzeptioneller Schemadefinitionssprache (CSDL) stellt eine Funktion dar, die in der Datenquelle definiert wird, aber durch das konzeptionelle Modell für andere Objekte verfügbar ist. Ein Function-Element im Speichermodell kann z. B. verwendet werden, um eine gespeicherte Prozedur in einer Datenbank darzustellen. Ein FunctionImport-Element im konzeptionellen Modell stellt die entsprechende Funktion in einer Entity Framework-Anwendung dar und wird der Speichermodellfunktion mithilfe des FunctionImportMapping-Elements zugeordnet. Wird die Funktion in der Anwendung aufgerufen, wird die entsprechende gespeicherte Prozedur in der Datenbank ausgeführt.
Ein FunctionImport-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element zugelassen)
- Parameter (kein oder mehrere Elemente zugelassen)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
- ReturnType (FunctionImport) (kein oder mehr zulässige Elemente)
Für jeden von der Funktion akzeptierten Parameter sollte ein Parameter-Element definiert werden.
Ein Rückgabetyp für eine Funktion muss entweder mit dem ReturnType-(FunctionImport)-Element oder dem ReturnType-Attribut (siehe unten) angegeben werden, aber nicht mit beiden. Der Rückgabetypwert muss eine Auflistung vom EdmSimpleType, EntityType oder ComplexType sein.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das FunctionImport-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der importierten Funktion. |
ReturnType | Nein | Der Typ, den die Funktion zurückgibt. Verwenden Sie dieses Attribut nicht, wenn die Funktion keinen Wert zurückgibt. Andernfalls muss der Wert eine Auflistung von ComplexType, EntityType oder EDMSimpleType sein. |
EntitySet | Nein | Wenn die Funktion eine Auflistung von Entitätstypen zurückgibt, muss der Wert für EntitySet der Entitätssatz sein, zu dem die Auflistung gehört. Andernfalls darf das Attribut EntitySet nicht verwendet werden. |
IsComposable | Nein | Wenn der Wert auf wahr festgelegt ist, ist die Funktion schreibbar (Table-valued Function) und kann in einer LINQ-Abfrage verwendet werden. Der Standardwert ist FALSE. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das FunctionImport-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein FunctionImport-Element, das einen Parameter akzeptiert und eine Auflistung von Entitätstypen zurückgibt:
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Key-Element (CSDL)
Das Key-Element ist ein untergeordnetes Element des EntityType-Elements und definiert einen Entitätsschlüssel (eine Eigenschaft oder eine Gruppe von Eigenschaften eines Entitätstyps, der die Identität bestimmt). Die Eigenschaften, die einen Entitätsschlüssel bilden, werden zur Entwurfszeit ausgewählt. Die Werte von Entitätsschlüsseleigenschaften müssen zur Laufzeit eine Entitätstypinstanz innerhalb einer Entitätenmenge eindeutig identifizieren. Die Eigenschaften, die einen Entitätsschlüssel bilden, sollten so ausgewählt werden, dass die Eindeutigkeit von Instanzen in einem Entitätssatz gewährleistet ist. Das Key-Element definiert einen Entitätsschlüssel, indem es auf mindestens eine der Eigenschaften eines Entitätstyps verweist.
Das Key-Element kann die folgenden untergeordneten Elemente aufweisen:
- PropertyRef (ein oder mehrere Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Key-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird ein Entitätstyp mit dem Namen Book definiert. Der Entitätsschlüssel wird definiert, indem auf die ISBN-Eigenschaft des Entitätstyps verwiesen wird.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Die ISBN-Eigenschaft ist für den Entitätsschlüssel gut geeignet, da ein Buch durch die ISBN eindeutig identifiziert wird.
Das folgende Beispiel zeigt einen Entitätstyp (Author), dessen Entitätstyp aus zwei Eigenschaften, nämlich Name und Address besteht.
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
Die Verwendung von Name und Address für den Entitätsschlüssel ist empfehlenswert, da zwei Autoren mit demselben Namen sehr wahrscheinlich nicht die gleiche Adresse besitzen. Dieser Entitätsschlüssel garantiert jedoch nicht absolut eindeutige Entitätsschlüssel in einem Entitätssatz. In diesem Fall wäre das Hinzufügen einer Eigenschaft wie AuthorId zur eindeutigen Identifikation eines Autors empfehlenswert.
Member-Element (CSDL)
Das Member-Element ist ein untergeordnetes Element des EnumType-Elements und definiert ein Element des Enumerationstyps.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das FunctionImport-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Members. |
Wert | Nein | Der Wert des Members. Der erste Enumerator hat standardmäßig den Wert 0. Der Wert jedes nachfolgenden Enumerators wird um 1 erhöht. Es können mehrere Member mit denselben Werten vorhanden sein. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das FunctionImport-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EnumType-Element mit drei Member-Elementen:
<EnumType Name="Color">
<Member Name="Red" Value=”1”/>
<Member Name="Green" Value=”3” />
<Member Name="Blue" Value=”5”/>
</EntityType>
NavigationProperty-Element (CSDL)
Ein NavigationProperty-Element definiert eine Navigationseigenschaft, die einen Verweis auf das andere Ende einer Zuordnung bereitstellt. Im Gegensatz zu mit dem Property-Element definierten Eigenschaften werden von Navigationseigenschaften Form und Eigenschaften von Daten nicht definiert. Sie bieten eine Möglichkeit, eine Zuordnung zwischen zwei Entitätstypen zu navigieren.
Beachten Sie, dass Navigationseigenschaften für beide Entitätstypen an den Enden einer Zuordnung optional sind. Wenn Sie für einen Entitätstyp am Ende einer Zuordnung eine Navigationseigenschaft definieren, muss keine Navigationseigenschaft für den Entitätstyp am anderen Ende der Zuordnung definiert werden.
Der von einer Navigationseigenschaft zurückgegebene Datentyp wird von der Multiplizität des Remotezuordnungsendes bestimmt. Angenommen, eine Navigationseigenschaft, OrdersNavProp, ist für den Entitätstyp Kunde vorhanden und navigiert in einer 1:n-Zuordnung zwischen Kunde und Bestellung. Da das Remotezuordnungsende für die Navigationseigenschaft eine Multiplizität von n (*) aufweist, ist sein Datentyp eine Auflistung (Order). Wenn eine Navigationseigenschaft CustomerNavProp für den Entitätstyp Order vorhanden ist, wäre der Datentyp Kunde, da die Multiplikation des Remote-Endes eins (1) ist.
Das NavigationProperty-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das NavigationProperty-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Navigationseigenschaft. |
Beziehung | Ja | Der Name einer Zuordnung, die sich innerhalb des Bereichs des Modells befindet. |
ToRole | Ja | Das Ende der Zuordnung, an dem die Navigation endet. Der Wert des ToRole-Attributs muss mit dem Wert eines der Role-Attributen übereinstimmen, die für eines der Zuordnungsenden definiert wurden (definiert im AssociationEnd-Element). |
FromRole | Ja | Das Ende der Zuordnung, an dem die Navigation beginnt. Der Wert des FromRole-Attributs muss mit dem Wert eines der Role-Attribute übereinstimmen, das für eines der Zuordnungsenden definiert wurden (definiert im AssociationEnd-Element). |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das NavigationProperty-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird ein Entitätstyp (Book) mit zwei Navigationseigenschaften (PublishedBy und WrittenBy) definiert:
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
OnDelete-Element (CSDL)
Das OnDelete-Element in konzeptioneller Schemadefinitionssprache (CSDL) definiert mit einer Zuordnung verbundenes Verhalten. Wenn das Action-Attribut an einem Ende einer Zuordnung auf Cascade festgelegt wird, werden verwandte Entitätstypen am anderen Ende der Zuordnung gelöscht, sobald der Entitätstyp am ersten Ende gelöscht wird. Ist die Zuordnung zwei Entitätstypen eine Primärschlüssel-zu-Primärschlüssel-Beziehung, wird ein geladenes abhängiges Objekt gelöscht, sobald das Prinzipalobjekt am anderen Ende der Zuordnung gelöscht wird. Dies ist unabhängig von der OnDelete-Spezifikation.
Hinweis
Das OnDelete-Element wirkt sich nur auf das Laufzeitverhalten einer Anwendung aus, nicht auf das Verhalten in der Datenquelle. Das in der Datenquelle definierte Verhalten sollte dem in der Anwendung definierten Verhalten entsprechen.
Das OnDelete-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das OnDelete-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Aktion | Ja | Cascade oder None. Bei Cascade werden abhängige Entitätstypen gelöscht, sobald der Prinzipalentitätstyp gelöscht wird. Bei None werden beim Löschen des Prinzipalentitätstyps abhängige Entitätstypen nicht gelöscht. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Association-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein Association-Element, das die CustomerOrders-Zuordnung definiert. Das OnDelete-Element gibt an, dass alle Orders, die mit einem bestimmten Customer zusammenhängen und in den ObjectContext geladen wurden, gelöscht werden, wenn der Customer gelöscht wird.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
Parameter-Element (CSDL)
Das Parameter-Element in konzeptioneller Schemadefinitionssprache (CSDL) kann ein untergeordnetes Element des FunctionImport-Elements oder des Function-Elements sein.
FunctionImport-Element-Anwendung
Ein Parameter-Element (als untergeordnetes Element des FunctionImport-Elements) wird verwendet, um Eingabe- und Ausgabeparameter für Funktionsimporte zu definieren, die in CSDL deklariert werden.
Ein Parameter-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element zugelassen)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Parameter-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Parameters. |
Typ | Ja | Der Parametertyp. Der Wert muss ein EDMSimpleType oder komplexer Typ sein, der im Gültigkeitsbereich des Modells liegt. |
Mode | Nein | Die Verwendung von In, Out oder InOut ist abhängig davon, ob der Parameter ein Eingabe-, Ausgabe- oder Eingabe/Ausgabeparameter ist. |
MaxLength | Nein | Die maximal zulässige Länge des Parameters. |
Genauigkeit | Nein | Die Genauigkeit des Parameters. |
Skalierung | Nein | Der Maßstab des Parameters. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Parameter räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Parameter-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein FunctionImport-Element mit einem untergeordneten Parameter-Element. Die Funktion akzeptiert einen Eingabeparameter und gibt eine Auflistung von Entitätstypen zurück.
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Function-Element-Anwendung
Ein Parameter-Element (als untergeordnetes Element des Function-Elements) definiert Parameter für Funktionen, die definiert oder in einem konzeptionellen Modell deklariert sind.
Ein Parameter-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Documentation (kein oder ein Element)
- CollectionType (kein oder ein Element)
- ReferenceType (kein oder ein Element)
- RowType (kein oder ein Element)
Hinweis
Nur eines der CollectionType-, ReferenceType- oder RowType-Elemente kann ein untergeordnetes Element eines Property-Elements sein.
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Hinweis
Anmerkungselemente müssen an alle anderen untergeordneten Elemente angereiht werden. Anmerkungselemente sind nur in CSDL v2 und höher zulässig.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Parameter-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Parameters. |
Typ | Nein | Der Parametertyp. Ein Parameter kann einer der folgenden Typen (oder Auflistungen dieser Typen) sein: EdmSimpleType Entitätstyp Komplexer Typ Zeilentyp Verweistyp |
NULL zulassen | Nein | Wahr (Standardwert) oder Falsch je nachdem, ob die Eigenschaft einen Null-Wert aufweisen kann. |
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Zeichenfolge mit fester Länge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalierung | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Unicode-Zeichenfolge gespeichert wird. |
Sortierung | Nein | Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Parameter-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein Function-Element, das ein untergeordnetes Parameter-Element verwendet, um einen Funktionsparameter zu definieren.
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="Instructor" Type="SchoolModel.Person" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
Principal-Element (CSDL)
Das Principal-Element in konzeptioneller Schemadefinitionssprache (CSDL) ist ein dem ReferentialConstraint-Element untergeordnetes Element, welches das Prinzipalende einer referenziellen Einschränkung definiert. Ein ReferentialConstraint-Element definiert Funktionen, die einer Einschränkung der referenziellen Integrität in einer relationalen Datenbank ähnlich sind. So wie eine Spalte (oder Spalten) einer Datenbanktabelle auf den Primärschlüssel einer anderen Tabelle verweisen kann, kann eine Eigenschaft (oder Eigenschaften) eines Entitätstyps auf den Entitätsschlüssel eines anderen Entitätstyps verweisen. Der Entitätstyp, auf den verwiesen wird, wird als Prinzipalende der Einschränkung bezeichnet. Der Entitätstyp, der auf das Prinzipalende verweist, wird als abhängiges Ende der Einschränkung bezeichnet. PropertyRef-Elemente werden zur Angabe der Schlüssel verwendet, auf die vom abhängigen Ende verwiesen wird.
Das Principal-Element kann die folgenden untergeordneten Elemente (in entsprechender Reihenfolge aufgelistet) umfassen:
- PropertyRef (ein oder mehrere Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Principal-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Rolle | Ja | Der Name des Entitätstyps am Prinzipalende der Zuordnung. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Principal-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein ReferentialConstraint-Element, das Teil der Definition der PublishedBy-Zuordnung ist. Die Id-Eigenschaft des Publisher-Entitätstyps bildet das Prinzipalende der referenziellen Einschränkung.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Property-Element (CSDL)
Das Property-Element in konzeptioneller Schemadefinitionssprache (CSDL) kann ein untergeordnetes Element des EntityType-Elements, des ComplexType-Elements oder des RowType-Elements sein.
EntityType- und ComplexType-Element-Anwendungen
Property-Elemente (als untergeordnete Elemente des EntityType- oder ComplexType-Elements) definieren die Form und die Eigenschaften der Daten, die eine Entitätstypinstanz oder eine komplexe Typinstanz enthält. Eigenschaften in einem konzeptionellen Modell sind analog zu den Eigenschaften, die für eine Klasse definiert werden. So wie Eigenschaften die Form einer Klasse definieren und Informationen zu Objekten enthalten definieren Eigenschaften in einem konzeptionellen Modell die Form eines Entitätstyps und enthalten Informationen zu Entitätstypinstanzen.
Das Property-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element zugelassen)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Die folgenden Facets können auf ein Property-Element angewendet werden: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. Facets sind XML-Attribute, die Informationen über die Speicherung von Eigenschaftswerten im Datenspeicher bereitstellen.
Hinweis
Facets können nur auf Eigenschaften vom Typ EDMSimpleType angewendet werden.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Property-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Eigenschaft. |
Typ | Ja | Der Typ des Eigenschaftswerts. Der Typ des Eigenschaftswerts muss ein EDMSimpleType oder ein komplexer Typ sein (erkennbar am vollqualifizierten Namen), der im Gültigkeitsbereich des Modells liegt. |
NULL zulassen | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In der CSDL v1 muss eine komplexe Typeigenschaft aufweisen Nullable="False" . |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Zeichenfolge mit fester Länge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalierung | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Unicode-Zeichenfolge gespeichert wird. |
Sortierung | Nein | Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird. |
ConcurrencyMode | Nein | None (Standardwert) oder Fixed. Wenn der Wert auf Fixedfestgelegt ist, wird der Wert der Eigenschaft zu Überprüfungen auf vollständige Parallelität verwendet. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) können für das Property-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein EntityType-Element mit drei Property-Elementen:
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Das folgende Beispiel zeigt ein ComplexType-Element mit fünf Property-Elementen:
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
RowType-Element-Anwendung
Property-Elemente (als untergeordnete Elemente eines RowType-Elements) definieren die Form und die Eigenschaften der Daten, die an eine modelldefinierte Funktion übergeben oder von einer modelldefinierten Funktion zurückgegeben werden können.
Das Property-Element kann über genau eines der folgenden untergeordneten Elemente verfügen:
- CollectionType
- ReferenceType
- RowType
Das Property-Element kann über eine beliebige Anzahl untergeordneter Anmerkungselemente verfügen.
Hinweis
Anmerkungselemente sind nur in CSDL v2 und höher zulässig.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Property-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Eigenschaft. |
Typ | Ja | Der Typ des Eigenschaftswerts. |
NULL zulassen | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In CSDL v1 muss eine komplexe Typeigenschaft Nullable="False" aufweisen. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Zeichenfolge mit fester Länge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalierung | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Unicode-Zeichenfolge gespeichert wird. |
Sortierung | Nein | Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) können für das Property-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt Property-Elemente, die zur Definition der Form des Rückgabetyps einer modelldefinierten Funktion verwendet wurden.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
PropertyRef-Element (CSDL)
Das PropertyRef-Element in konzeptioneller Schemadefinitionssprache (CSDL) verweist auf eine Eigenschaft eines Entitätstyps. So wird angegeben, dass die Eigenschaft eine der folgenden Rollen ausführt:
- Ein Teil des Entitätsschlüssels (eine Eigenschaft oder ein Satz von Eigenschaften eines Entitätstyps, der die Identität bestimmt). Ein oder mehrere PropertyRef-Elemente können zum Definieren eines Entitätsschlüssels verwendet werden.
- Das abhängige Ende oder Prinzipalende einer referenziellen Einschränkung.
Das PropertyRef-Element kann nur über Anmerkungselemente (keins oder mehrere) als untergeordnete Elemente verfügen.
Hinweis
Anmerkungselemente sind nur in CSDL v2 und höher zulässig.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das PropertyRef-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der referenzierten Eigenschaft. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das PropertyRef-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird ein Entitätstyp mit dem Namen (Book) definiert. Der Entitätsschlüssel wird definiert, indem auf die ISBN-Eigenschaft des Entitätstyps verwiesen wird.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Im nächsten Beispiel werden zwei PropertyRef-Elemente zur Angabe verwendet, dass zwei Eigenschaften (Id und PublisherId) das Prinzipalende und das abhängige Ende einer referenziellen Einschränkung bilden.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
ReferenceType-Element (CSDL)
Mit dem ReferenceType-Element in konzeptioneller Schemadefinitionssprache (CSDL) wird ein Verweis auf einen Entitätstyp angegeben. Das ReferenceType-Element kann ein untergeordnetes Element der folgenden Elemente sein:
- ReturnType (Funktion)
- Parameter
- CollectionType
Das ReferenceType-Element wird beim Definieren eines Parameters oder eines Rückgabetyps für eine Funktion verwendet.
Ein ReferenceType-Element kann die folgenden untergeordneten Elemente beinhalten (in entsprechender Reihenfolge aufgelistet):
- Dokumentation (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das ReferenceType-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Ja | Der Name des Entitätstyps, auf den verwiesen wird. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das ReferenceType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt das ReferenceType-Element, das als untergeordnetes Element eines Parameter-Elements in einer modelldefinierten Funktion verwendet wird, die einen Verweis auf den Entitätstyp Person akzeptiert:
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="instructor">
<ReferenceType Type="SchoolModel.Person" />
</Parameter>
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
Das folgende Beispiel zeigt das ReferenceType-Element, das als untergeordnetes Element eines ReturnType (Function)-Elements in einer modelldefinierten Funktion verwendet wird, die einen Verweis auf den Entitätstyp Person zurückgibt:
<Function Name="GetPersonReference">
<Parameter Name="p" Type="SchoolModel.Person" />
<ReturnType>
<ReferenceType Type="SchoolModel.Person" />
</ReturnType>
<DefiningExpression>
REF(p)
</DefiningExpression>
</Function>
ReferentialConstraint-Element (CSDL)
Ein ReferentialConstraint-Element in konzeptioneller Schemadefinitionssprache (CSDL) definiert die Funktionalität, die einer Einschränkung der referenziellen Integrität in einer relationalen Datenbank ähnlich ist. So wie eine Spalte (oder Spalten) einer Datenbanktabelle auf den Primärschlüssel einer anderen Tabelle verweisen kann, kann eine Eigenschaft (oder Eigenschaften) eines Entitätstyps auf den Entitätsschlüssel eines anderen Entitätstyps verweisen. Der Entitätstyp, auf den verwiesen wird, wird als Prinzipalende der Einschränkung bezeichnet. Der Entitätstyp, der auf das Prinzipalende verweist, wird als abhängiges Ende der Einschränkung bezeichnet.
Wenn ein Fremdschlüssel, der für einen Entitätstyp verfügbar gemacht wird, auf eine Eigenschaft eines anderen Entitätstyps verweist, definiert das ReferentialConstraint-Element eine Zuordnung zwischen den zwei Entitätstypen. Da das ReferentialConstraint-Element Informationen darüber bereitstellt, wie zwei Entitätstypen zueinander in Beziehung stehen, ist kein entsprechendes AssociationSetMapping-Element in der Mapping Specification Language (MSL) erforderlich. Eine Zuordnung zwischen zwei Entitätstypen, für die keine Fremdschlüssel verfügbar ist, muss ein entsprechendes AssociationSetMapping-Element aufweisen, um der Datenquelle Zuordnungsinformationen zuzuordnen.
Wenn ein Fremdschlüssel für einen Entitätstyp nicht verfügbar ist, kann das ReferentialConstraint-Element zwischen dem Entitätstyp und einem anderen Entitätstyp nur eine Primärschlüssel-zu-Primärschlüssel-Einschränkung definieren.
Ein ReferentialConstraint-Element kann die folgenden untergeordneten Elemente aufweisen (in der aufgeführten Reihenfolge):
- Dokumentation (kein oder ein Element)
- Prinzipal (genau ein Element)
- Abhängig (genau ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
Das ReferentialConstraint-Element kann eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) aufweisen. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein ReferentialConstraint-Element, das als Teil der Definition der PublishedBy-Zuordnung verwendet wird.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
ReturnType (Function)-Element (CSDL)
Das ReturnType-Element in konzeptioneller Schemadefinitionssprache (CSDL) gibt den Rückgabetyp für eine Funktion an, die in einem Function-Element definiert ist. Ein Funktionsrückgabetyp kann auch mit einem ReturnType-Attribut angegeben werden.
Rückgabetypen können alle EdmSimpleType, Entitätstypen, komplexe Typen, Zeilentypen, Ref-Typen oder eine Auflistung einer dieser Typen sein.
Der Rückgabetyp einer Funktion kann entweder mit dem Type-Attribut des ReturnType (Function)-Elements oder mit einem der folgenden untergeordneten Elemente angegeben werden:
- CollectionType
- ReferenceType
- RowType
Hinweis
Ein Modell überprüft nicht, ob für einen Funktionsrückgabetyp das Type-Attribut des ReturnType-Elements und eines der untergeordneten Elemente angegeben sind.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das ReturnType (Function)-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
ReturnType | Nein | Der von der Funktion zurückgegebene Typ. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das ReturnType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird mithilfe eines Function-Elements eine Funktion definiert, welche die Anzahl der Jahre zurückgibt, die sich ein Buch im Druck befand. Beachten Sie, dass der Rückgabetyp durch das Type-Attribut eines ReturnType (Function)-Elements angegeben wird.
<Function Name="GetYearsInPrint">
<ReturnType Type=="Edm.Int32">
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
ReturnType (FunctionImport)-Element (CSDL)
Das ReturnType (FunctionImport)-Element in der konzeptionellen Schemadefinitionssprache (CSDL) gibt den Rückgabetyp für eine Funktion an, die in einem FunctionImport-Element definiert ist. Ein Funktionsrückgabetyp kann auch mit einem ReturnType-Attribut angegeben werden.
Rückgabetypen können eine beliebige Auflistung von Entitätstypen, komplexem Typ oder EdmSimpleType sein.
Der Rückgabetyp einer Funktion wird mit dem Type-Attribut des ReturnType (FunctionImport)-Elements angegeben.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das ReturnType (FunctionImport)-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Nein | Der Typ, den die Funktion zurückgibt. Der Wert muss eine Auflistung von ComplexType, EntityType oder EDMSimpleType sein. |
EntitySet | Nein | Wenn die Funktion eine Auflistung von Entitätstypen zurückgibt, muss der Wert für EntitySet der Entitätssatz sein, zu dem die Auflistung gehört. Andernfalls darf das Attribut EntitySet nicht verwendet werden. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das ReturnType (FunctionImport)-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird ein FunctionImport-Objekt verwendet, das Bücher und Herausgeber zurückgibt. Beachten Sie, dass die Funktion zwei Ergebnissätze zurückgibt und daher zwei ReturnType (FunctionImport)-Elemente angegeben werden.
<FunctionImport Name="GetBooksAndPublishers">
<ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
<ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
</FunctionImport>
RowType-Element (CSDL)
Ein RowType-Element in konzeptioneller Schemadefinitionssprache (CSDL) definiert eine unbenannte Struktur als Parameter oder Rückgabetyp für eine im konzeptionellen Modell definierte Funktion.
Ein RowType-Element kann ein untergeordnetes Element der folgenden Elemente sein:
- CollectionType
- Parameter
- ReturnType (Funktion)
Ein RowType-Element kann die folgenden untergeordneten Elemente (in entsprechender Reihenfolge aufgelistet) umfassen:
- Eigenschaft (eins oder mehrere)
- Anmerkungselemente (keins oder mehrere)
Anwendbare Attribute
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das RowType-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt eine modelldefinierte Funktion, die mithilfe eines CollectionType-Elements angibt, dass die Funktion eine Auflistung von Zeilen (wie im RowType-Element angegeben) zurückgeben soll.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
Schema-Element (CSDL)
Das Schema-Element ist das Stammelement einer konzeptionellen Modelldefinition. Es enthält Definitionen für die Objekte, Funktionen und Container, die ein konzeptionelles Modell bilden.
Das Schema-Element kann keine oder mehrere der folgenden untergeordneten Elemente enthalten:
- Using
- EntityContainer
- EntityType
- EnumType
- Zuordnung
- ComplexType
- Funktion
Ein Schema-Element kann kein oder ein Anmerkungselement enthalten.
Hinweis
Das Function-Element und die Anmerkungselemente sind nur in CSDL v2 und höher zulässig.
Das Schema-Element definiert mithilfe des Namespace-Attributs den Namespace für den Entitätstyp, den komplexen Typ und die Zuordnungsobjekte in einem konzeptionellen Modell. Innerhalb eines Namespace müssen alle Objekte eine eindeutige Bezeichnung aufweisen. Namespaces können mehrere Schema-Elemente und mehrere CSDL-Dateien umfassen.
Ein Namespace in einem konzeptionellen Modell unterscheidet sich vom XML-Namespace des Schema-Elements. Ein Namespace in einem konzeptionellen Modell (wie vom Namespace-Attribut definiert) ist ein logischer Container für Entitätstypen, komplexe Typen und Zuordnungstypen. Der XML-Namespace (vom xmlns-Attribut angegeben) eines Schema-Elements ist der Standardnamespace für untergeordnete Elemente und Attribute des Schema-Elements. XML-Namespaces des Formulars https://schemas.microsoft.com/ado/YYYY/MM/edm
(wobei JJJJ und MM ein Jahr bzw. Monat darstellen) sind für CSDL reserviert. Benutzerdefinierte Elemente und Attribute können nicht in Namespaces mit diesem Format vorhanden sein.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Schema-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Namespace | Ja | Der Namespace für das konzeptionelle Modell. Der Wert des Namespace-Attributs wird verwendet, um den vollqualifizierten Namen eines Typs zu bilden. Befindet sich z. B. ein EntityType-Element mit dem Namen Customer im Simple.Example.Model-Namespace, dann lautet der voll qualifizierte Name des EntityType-Elements SimpleExampleModel.Customer. Die folgenden Zeichenfolgen können nicht als Wert für das Namespace-Attribut verwendet werden: System, Transient oder Edm. Der Wert für das Namespace-Attribut darf nicht mit dem Wert für das Namespace-Attribut im SSDL Schema-Element übereinstimmen. |
Alias | Nein | Ein anstelle der Namespacebezeichnung verwendeter Bezeichner. Wenn sich beispielsweise ein EntityType-Element namens Customer im Simple.Example.Model-Namespace befindet und der Wert des Alias-Attributs Model ist, können Sie Model.Customer als vollqualifizierten Namen des EntityType verwenden. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Schema-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt ein Schema-Element, das ein EntityContainer-Element, zwei EntityType-Elemente und ein Association-Element enthält.
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/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>
TypeRef-Element (CSDL)
Das TypeRef-Element in konzeptioneller Schemadefinitionssprache (CSDL) stellt einen Verweis auf einen vorhandenen benannten Typen bereit. Das TypeRef-Element kann ein untergeordnetes Element des CollectionType-Elements sein, mit dem angegeben wird, dass eine Funktion über eine Auflistung als Parameter oder Rückgabetyp verfügt.
Ein TypeRef-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):
- Dokumentation (kein oder ein Element)
- Anmerkungselemente (kein oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das TypeRef-Element angewendet werden können. Beachten Sie, dass die Attribute DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode und Collation nur für EDMSimpleTypes gelten.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Nein | Der Name der Typbibliothek, auf die verwiesen wird. |
NULL zulassen | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In CSDL v1 muss eine komplexe Typeigenschaft Nullable="False" aufweisen. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Zeichenfolge mit fester Länge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalierung | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | Wahr oder Falsch, abhängig davon, ob der Eigenschaftswert als Unicode-Zeichenfolge gespeichert wird. |
Sortierung | Nein | Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird. |
Hinweis
Für das CollectionType-Element kann eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Das folgende Beispiel zeigt eine modelldefinierte Funktion, die das TypeRef-Element (als untergeordnetes Element eines CollectionType-Elements) verwendet, um anzugeben, dass die Funktion eine Auflistung von Department-Entitätstypen akzeptiert.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
Using-Element (CSDL)
Das Using-Element in konzeptioneller Schemadefinitionssprache (CSDL) importiert den Inhalt eines konzeptionellen Modells aus einem anderen Namespace. Sie können auf Entitätstypen, komplexe Typen und Zuordnungstypen verweisen, die in einem anderen konzeptionellen Modell definiert sind, indem Sie den Wert des Namespace-Attributs festlegen. Mehr als ein Using-Elemente kann untergeordnetes Element eines Schema-Elements sein.
Hinweis
Das Using-Element in CSDL funktioniert nicht genau wie eine Using-Anweisung in einer Programmiersprache. Durch das Importieren eines Namespace mit einer Using-Anweisung in einer Programmiersprache werden Objekte im ursprünglichen Namespace nicht beeinflusst. In CSDL kann ein importierter Namespace einen Entitätstyp enthalten, der von einem Entitätstyp im ursprünglichen Namespace abgeleitet ist. Dies kann sich auf im ursprünglichen Namespace deklarierte Entitätssätze auswirken.
Das Using-Element kann die folgenden untergeordneten Elemente aufweisen:
- Dokumentation (kein oder ein Element zugelassen)
- Anmerkungselemente (kein oder mehrere Elemente zugelassen)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die für das Using-Element übernommen werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Namespace | Ja | Der Name des importierten Namespaces. |
Alias | Ja | Ein anstelle der Namespacebezeichnung verwendeter Bezeichner. Obwohl dieses Attribut erforderlich ist, muss es nicht anstelle des Namespacenamens verwendet wird, um Objektnamen zu qualifizieren. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann für das Using-Element übernommen werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für CSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie das Using-Element zum Import eines Namespace verwendet wird, der an einer anderen Stelle definiert ist. Der Namespace für das angezeigte Schema-Element ist BooksModel
. Die Address
-Eigenschaft für den Publisher
EntityType ist ein komplexer Typ, der im ExtendedBooksModel
-Namespace (mit dem Using-Element importiert) definiert wird.
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<Using Namespace="BooksModel.Extended" Alias="BMExt" />
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
</EntityContainer>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BMExt.Address" Name="Address" Nullable="false" />
</EntityType>
</Schema>
Anmerkungsattribute (CSDL)
Anmerkungsattribute in konzeptioneller Schemadefinitionssprache (CSDL) sind benutzerdefinierte XML-Attribute im konzeptionellen Modell. Neben dem Vorhandensein einer gültigen XML-Struktur muss für Anmerkungsattribute folgendes zutreffen:
- Anmerkungsattribute dürfen sich in keinem XML-Namespace befinden, der für CSDL reserviert ist.
- Für ein angegebenes CSDL-Element kann mehr als ein Anmerkungsattribut übernommen werden.
- Die vollqualifizierten Namen zweier Anmerkungsattribute dürfen nicht übereinstimmen.
Anmerkungsattribute können verwendet werden, um zusätzliche Metadaten für die Elemente in einem konzeptionellen Modell bereitzustellen. Auf Metadaten in Anmerkungselementen kann zur Laufzeit mithilfe von Klassen im Namespace System.Data.Metadata.Edm zugegriffen werden.
Beispiel
Das folgende Beispiel zeigt ein EntityType-Element mit einem Anmerkungsattribut (CustomAttribute). Das Beispiel zeigt außerdem ein Anmerkungselement, das auf das Entitätstypelement angewendet wird.
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2009/11/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 Anmerkungsattribut abgerufen und in die Konsole geschrieben:
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:CustomAttribute"))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
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:
using System.Data.Metadata.Edm;
Anmerkungselemente (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. Ab .NET Framework Version 4 können Metadaten, die in Anmerkungselementen enthalten sind, zur Laufzeit mithilfe von Klassen im System.Data.Metadata.Edm-Namespace aufgerufen 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.
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2009/11/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:
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:
using System.Data.Metadata.Edm;
Konzeptionelle Modelltypen (CSDL)
Die konzeptionelle Schemadefinitionssprache (CSDL) unterstützt einen Satz von abstrakten primitiven Datentypen mit dem Namen EDMSimpleTypes, die Eigenschaften in einem konzeptionellen Modell definieren. EDMSimpleTypes sind Proxys für primitive Datentypen, die im Speicher oder der Hostumgebung unterstützt werden.
In der nachfolgenden Tabelle werden die von CSDL unterstützten primitiven Datentypen aufgeführt. In der Tabelle werden auch die Facets aufgeführt, die auf jeden EDMSimpleType angewendet werden können.
EDMSimpleType | Beschreibung | Anwendbare Facets |
---|---|---|
Edm.Binary | Enthält Binärdaten. | MaxLength, FixedLength, Nullable, Default |
Edm.Boolean | Enthält den Wert wahr oder falsch. | Nullable, Default |
Edm.Byte | Enthält einen 8-Bit-Ganzzahlwert ohne Vorzeichen. | Precision, Nullable, Default |
Edm.DateTime | Stellt ein Datum und eine Uhrzeit dar. | Precision, Nullable, Default |
Edm.DateTimeOffset | Enthält ein Datum und eine Uhrzeit als Offset in Minuten von GMT. | Precision, Nullable, Default |
Edm.Decimal | Enthält einen numerischen Wert mit fester Genauigkeit und festen Dezimalstellen. | Precision, Nullable, Default |
Edm.Double | Enthält eine Gleitkommazahl mit einer Genauigkeit von 15 Stellen | Precision, Nullable, Default |
Edm.Float | Enthält eine Gleitkommazahl mit einer Genauigkeit von 7 Stellen. | Precision, Nullable, Default |
Edm.Guid | Enthält einen eindeutigen 16-Byte-Bezeichner. | Precision, Nullable, Default |
Edm.Int16 | Enthält einen 16-Bit-Ganzzahlwert mit Vorzeichen. | Precision, Nullable, Default |
Edm.Int32 | Enthält einen 32-Bit-Ganzzahlwert mit Vorzeichen. | Precision, Nullable, Default |
Edm.Int64 | Enthält einen 64-Bit-Ganzzahlwert mit Vorzeichen. | Precision, Nullable, Default |
Edm.SByte | Enthält einen 8-Bit-Ganzzahlwert mit Vorzeichen. | Precision, Nullable, Default |
Edm.String | Enthält Zeichendaten. | Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default |
Edm.Time | Enthält eine Uhrzeit. | Precision, Nullable, Default |
Edm.Geography | Nullfähig, Default, SRID | |
Edm.GeographyPoint | Nullfähig, Default, SRID | |
Edm.GeographyLineString | Nullfähig, Default, SRID | |
Edm.GeographyPolygon | Nullfähig, Default, SRID | |
Edm.GeographyMultiPoint | Nullfähig, Default, SRID | |
Edm.GeographyMultiLineString | Nullfähig, Default, SRID | |
Edm.GeographyMultiPolygon | Nullfähig, Default, SRID | |
Edm.GeographyCollection | Nullfähig, Default, SRID | |
Edm.Geometry | Nullfähig, Default, SRID | |
Edm.GeometryPoint | Nullfähig, Default, SRID | |
Edm.GeometryLineString | Nullfähig, Default, SRID | |
Edm.GeometryPolygon | Nullfähig, Default, SRID | |
Edm.GeometryMultiPoint | Nullfähig, Default, SRID | |
Edm.GeometryMultiLineString | Nullfähig, Default, SRID | |
Edm.GeometryMultiPolygon | Nullfähig, Default, SRID | |
Edm.GeometryCollection | Nullfähig, Default, SRID |
Facets (CSDL)
Facets in konzeptioneller Schemadefinitionssprache (CSDL) stellen Einschränkungen für Eigenschaften von Entitätstypen und komplexen Typen dar. Facets werden in den folgenden CSDL-Elementen als XML-Attribute angezeigt:
- Eigenschaft
- TypeRef
- Parameter
In der folgenden Tabelle werden die in CSDL unterstützten Facets beschrieben. Alle Facets sind optional. Beim Generieren einer Datenbank aus einem konzeptionellen Modell werden einige der unten aufgeführten Facets vom Entity Framework verwendet.
Hinweis
Informationen zu Datentypen in einem konzeptionellen Modell finden Sie unter Conceptual Model Types (CSDL).
Facet | Beschreibung | Gilt für: | Wird für die Datenbankgenerierung verwendet | Wird von der Laufzeit verwendet |
---|---|---|---|---|
Sortierung | Gibt die bei Vergleich- und Sortiervorgängen zu verwendende Sortierreihenfolge für die Werte der Eigenschaft an. | Edm.String | Ja | Nein |
ConcurrencyMode | Gibt an, dass der Eigenschaftswert für Prüfungen der vollständigen Parallelität verwendet werden soll. | Alle EDMSimpleType-Eigenschaften | Nein | Ja |
Standard | Gibt den Standardwert der Eigenschaft an, wenn bei der Instanziierung kein Wert angegeben wird. | Alle EDMSimpleType-Eigenschaften | Ja | Ja |
FixedLength | Gibt an, ob sich die Länge des Eigenschaftswerts ändern kann. | Edm.Binary, Edm.String | Ja | Nein |
MaxLength | Gibt die maximale Länge des Eigenschaftswerts an. | Edm.Binary, Edm.String | Ja | Nein |
NULL zulassen | Gibt an, ob die Eigenschaft über einen NULL-Wert verfügen kann. | Alle EDMSimpleType-Eigenschaften | Ja | Ja |
Genauigkeit | Bei Eigenschaften des Typs Decimal wird die Anzahl der Ziffern angegeben, über die ein Eigenschaftswert verfügen kann. Gibt für Eigenschaften vom Typ Time, DateTime und DateTimeOffset die Anzahl der Ziffern für den Bruchteil der Sekunden des Eigenschaftswerts an. | Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time | Ja | Nein |
Skalierung | Gibt die Anzahl der Dezimalstellen für den Eigenschaftswert an. | Edm.Decimal | Ja | Nein |
SRID | Gibt die System-ID des räumlichen Referenzsystems an. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). | Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection | Nein | Ja |
Unicode | Gibt an, ob der Eigenschaftswert als Unicode gespeichert wird. | Edm.String | Ja | Ja |
Hinweis
Beim Generieren einer Datenbank aus einem konzeptionellen Modell erkennt der Assistent zum Generieren von Datenbanken den Wert des StoreGeneratedPattern-Attributs für ein Property-Element, wenn es sich im folgenden Namespace befindet: https://schemas.microsoft.com/ado/2009/02/edm/annotation
. Die unterstützten Werte für das Attribut sind Identity und Computed. Der Wert für Identity erzeugt eine Datenbankspalte mit einem Identitätswert, der in der Datenbank generiert wird. Der Wert für Computed erzeugt eine Spalte mit einem Wert, der in der Datenbank berechnet wird.
Beispiel
Das folgende Beispiel zeigt für die Eigenschaften eines Entitätstyps übernommene Facets:
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductId" />
</Key>
<Property Type="Int32"
Name="ProductId" Nullable="false"
a:StoreGeneratedPattern="Identity"
xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
<Property Type="String"
Name="ProductName"
Nullable="false"
MaxLength="50" />
<Property Type="String"
Name="Location"
Nullable="true"
MaxLength="25" />
</EntityType>