CSDL-Spezifikation
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 mit CSDL beschrieben werden, werden vom Entity Framework verwendet, um Entitäten und Beziehungen zuzuordnen, die in einem konzeptionellen Modell einer Datenquelle definiert sind. Weitere Informationen finden Sie unter SSDL-Spezifikation und MSL-Spezifikation.
CSDL ist die Implementierung des Entity Frameworks für das Entitätsdatenmodell.
In einer Entity Framework-Anwendung werden konzeptionelle Modellmetadaten aus einer CSDL-Datei (geschrieben in CSDL) in eine Instanz der System.Data.Metadata.Edm.EdmItemCollection geladen und mithilfe von Methoden in der System.Data.Metadata.Edm.MetadataWorkspace-Klasse zugänglich. Entity Framework verwendet konzeptionelle Modellmetadaten, um Abfragen mit dem konzeptionellen Modell in datenquellenspezifische Befehle zu übersetzen.
Der EF Designer speichert konzeptionelle Modellinformationen in einer edmx-Datei zur Entwurfszeit. Zur Erstellungszeit verwendet der EF Designer Informationen in einer edmx-Datei, um die CSDL-Datei zu erstellen, die von Entity Framework zur Laufzeit 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 vielen (*) 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.
Ein Association-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- End (genau 2 Elemente)
- ReferentialConstraint (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Association-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der Zuordnung. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das Association-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
Das folgende Beispiel zeigt ein Association-Element, das die CustomerOrders-Zuordnung definiert, wenn Fremdschlüssel nicht für die Entitätstypen"Customer " und "Order " verfügbar gemacht wurden. Die Multiplikationswerte für jedes Ende der Zuordnung deuten darauf hin, dass viele Bestellungen einem Kunden zugeordnet werden können, aber nur ein Kunde kann einer Bestellung zugeordnet werden. Darüber hinaus gibt das OnDelete-Element an, dass alle Bestellungen , die sich auf einen bestimmten Kunden beziehen 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 Entitätstypen"Customer " und "Order " verfügbar gemacht wurden. Wenn Fremdschlüssel verfügbar gemacht werden, 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.
Das AssociationSet-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element zugelassen)
- End (genau zwei Elemente erforderlich)
- Anmerkungselemente (kein (null) Element oder mehrere Elemente zugelassen)
Das Association-Attribut gibt den Zuordnungstyp an, den ein Zuordnungssatz enthält. Die Entitätssätze, die das Ende eines Zuordnungssatzes bilden, werden mit genau zwei untergeordneten Endelementen angegeben.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das AssociationSet-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätssatzes. Der Wert des Name-Attributs kann nicht mit dem Wert des Association-Attributs identisch sein. |
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 auf das AssociationSet-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
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 der konzeptionellen Schemadefinitionssprache (CSDL) gibt an, dass ein Funktionsparameter oder Funktionsrückgabetyp eine Auflistung ist. Das CollectionType-Element kann ein untergeordnetes Element des Parameters-Elements oder des ReturnType (Function)-Elements sein. Der Typ der Auflistung kann mithilfe des Type-Attributs oder eines der folgenden untergeordneten Elemente angegeben werden:
- CollectionType
- ReferenceType
- RowType
- TypeRef
Hinweis
Ein Modell überprüft nicht, ob der Typ einer Auflistung sowohl mit dem Type-Attribut als auch mit einem untergeordneten Element angegeben wird.
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. |
Nullwerte zulässig | 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 enthalten Nullable="False" sein. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | True oder False abhängig davon, ob der Eigenschaftswert als feste Längenzeichenfolge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalieren | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Räumlicher Systemreferenzbezeichner. Gültig nur für Eigenschaften von räumlichen Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server) |
Unicode | Nein | True oder False 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
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das CollectionType-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 eine modelldefinierte Funktion gezeigt, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung von Person-Entitätstypen zurückgibt (wie mit dem ElementType-Attribut angegeben).
<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>
Im folgenden Beispiel wird eine modelldefinierte Funktion gezeigt, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung von Zeilen zurückgibt (wie im RowType-Element angegeben).
<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>
Im folgenden Beispiel wird eine modelldefinierte Funktion gezeigt, die das CollectionType-Element verwendet, um anzugeben, dass die Funktion als Parameter eine Sammlung von Abteilungs-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>
ComplexType-Element (CSDL)
Ein ComplexType-Element definiert eine Datenstruktur aus EdmSimpleType-Eigenschaften oder anderen komplexen Typen. 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 Teile 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 über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Property (0 (null) oder mehr Elemente)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
In der folgenden Tabelle werden die Attribute beschrieben, die auf das ComplexType-Element angewendet 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 | True oder False (der Standardwert) abhängig davon, ob der komplexe Typ ein abstrakter Typ ist. [!NOTE] |
> Dieses Attribut ist in CSDL v1 nicht anwendbar. Komplexe Typen in dieser Version können keine abstrakten Typen sein. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das ComplexType-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 komplexer Typ, Eine Adresse mit den Eigenschaften "EdmSimpleType " StreetAddress, "City", " StateOrProvince", " Land" und " Postleitzahl" gezeigt.
<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>
Um den komplexen Typ Address (oben) als Eigenschaft eines Entitätstyps zu definieren, müssen Sie den Eigenschaftentyp in der Entitätstypdefinition deklarieren. Im folgenden Beispiel wird die Address-Eigenschaft als komplexer Typ für einen Entitätstyp (Publisher) dargestellt:
<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
Für Validierungszwecke kann ein DefinitionsExpression-Element beliebige Inhalte enthalten. Entity Framework löst jedoch eine Ausnahme zur Laufzeit aus, wenn ein DefinitionsExpression-Element keine gültige Entität SQL enthält.
Anwendbare Attribute
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das DefinitionsExpression-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 DefineExpression-Element verwendet, um eine Funktion zu definieren, die die Anzahl der Jahre zurückgibt, seit ein Buch veröffentlicht wurde. Der Inhalt des DefinitionsExpression-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 abhängige Element in der konzeptionellen Schemadefinitionssprache (CSDL) ist ein untergeordnetes Element für das ReferentialConstraint-Element und definiert das abhängige Ende einer referenziellen Einschränkung. Ein ReferentialConstraint-Element definiert Funktionen, die einer referenziellen Integritätseinschränkung 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 Hauptende 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.
Das abhängige Element kann über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- PropertyRef (mindestens ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das abhängige Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Rolle | Ja | Der Name des Entitätstyps am abhängigen Ende der Zuordnung. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das abhängige 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
Das folgende Beispiel zeigt ein ReferentialConstraint-Element , das als Teil der Definition der PublishedBy-Zuordnung verwendet wird. Die PublisherId-Eigenschaft des Book-Entitätstyps 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 der konzeptionellen Schemadefinitionssprache (CSDL) kann verwendet werden, um Informationen zu einem Objekt bereitzustellen, das in einem übergeordneten Element definiert ist. Wenn dasDokumentationselement ein untergeordnetes Element ist, das auf der Entwurfsoberfläche des EF-Designers (z. B. entität, Zuordnung oder Eigenschaft) angezeigt wird, wird der Inhalt des Dokumentationselements im Visual Studio-Eigenschaftenfenster für das Objekt angezeigt.
Das Documentation-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):
- Zusammenfassung: Eine kurze Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
- LongDescription: Eine umfangreiche Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
- Anmerkungselemente. (keine (Null) oder mehrere Elemente)
Anwendbare Attribute
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Documentation-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 das Dokumentationselement als untergeordnetes Element eines EntityType-Elements dargestellt. Wenn sich der nachstehende Codeausschnitt im CSDL-Inhalt einer .edmx-Datei befindet, wird der Inhalt der Elemente "Zusammenfassung " und "LongDescription" im Visual Studio-Eigenschaftenfenster angezeigt, wenn Sie auf den Customer
Entitätstyp 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 in der konzeptionellen Schemadefinitionssprache (CSDL) kann ein untergeordnetes Element des Association-Elements oder des AssociationSet-Elements sein. In jedem Fall ist die Rolle des End-Elements unterschiedlich und die anwendbaren Attribute unterscheiden sich.
Das End-Element als untergeordnetes Objekt des Association-Elements
Ein End-Element (als untergeordnetes Element des Association-Elements ) identifiziert den Entitätstyp auf einem Ende einer Zuordnung und die Anzahl der Entitätstypinstanzen, die am Ende einer Zuordnung vorhanden sein 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 über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- OnDelete (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das End-Element angewendet werden können, wenn es sich 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, die am Ende der Zuordnung stehen können. 1 gibt an, dass genau eine Entitätstypinstanz am Zuordnungsende vorhanden ist. 0..1 gibt an, dass null oder eine Entitätstypinstanz am Zuordnungsende vorhanden ist. * gibt an, dass null, ein oder mehrere Entitätstypinstanzen am Zuordnungsende vorhanden sind. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das End-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
Das folgende Beispiel zeigt ein Zuordnungselement , das die CustomerOrders-Zuordnung definiert. Die Multiplikationswerte für jedes Ende der Zuordnung geben an, dass viele Bestellungen einem Kunden zugeordnet werden können, aber nur ein Kunde kann einer Bestellung zugeordnet werden. Darüber hinaus gibt das OnDelete-Element an, dass alle Bestellungen , die sich auf einen bestimmten Kunden beziehen 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" />
<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 eines Zuordnungssatzes an. Das AssociationSet-Element muss zwei Endelemente enthalten. Die in einem End-Element enthaltenen Informationen werden in der Zuordnung einer Zuordnung mit einer Datenquelle verwendet.
Ein End-Element kann über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Hinweis
Anmerkungselemente müssen an alle anderen untergeordneten Elemente angereiht werden. Anmerkungenelemente sind nur in CSDL v2 und höher zulässig.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das End-Element angewendet werden können, wenn es sich 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. Wenn das Rollenattribute nicht verwendet wird, ist der Name des Zuordnungssatzendes der Name des Entitätssatzes. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das End-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
Das folgende Beispiel zeigt ein EntityContainer-Element mit zwei AssociationSet-Elementen , jeweils mit zwei Endelementen :
<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 der konzeptionellen Schemadefinitionssprache (CSDL) ist ein logischer Container für Entitätssätze, Zuordnungssätze und Funktionsimporte. Einem Speichermodell-Entitätscontainer wird durch das EntityContainerMapping-Element 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 null oder ein Dokumentationselement aufweisen. Wenn ein Dokumentationselement vorhanden ist, muss es allen Element "EntitySet", " AssociationSet" und "FunctionImport " vorausgehen.
Ein EntityContainer-Element kann null oder mehr der folgenden untergeordneten Elemente aufweisen (in der aufgeführten Reihenfolge):
- EntitySet
- AssociationSet
- FunctionImport
- Anmerkungselemente
Sie können ein EntityContainer-Element erweitern, um den Inhalt eines anderen EntityContainer-Elements einzuschließen, das sich im gleichen Namespace befindet. Um den Inhalt eines anderen EntityContainer-Elements einzuschließen, legen Sie im Referenzierungs-EntityContainer-Element den Wert des "Extends"-Attributs auf den Namen des EntityContainer-Elements fest, das Sie einschließen möchten. Alle untergeordneten Elemente des enthaltenen EntityContainer-Elements werden als untergeordnete Elemente des referenzierenden EntityContainer-Elements behandelt.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Using-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätscontainers. |
Erweitert | Nein | Der Name eines anderen Entitätscontainers innerhalb des gleichen Namespaces. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das EntityContainer-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 EntityContainer-Element gezeigt, das drei Entitätssätze 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 der konzeptionellen Schemadefinitionssprache ist ein logischer Container für Instanzen eines Entitätstyps und instanzen eines beliebigen Typs, der von diesem Entitätstyp abgeleitet wird. 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.
Das EntitySet-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):
- Dokumentationselement (kein (null) oder ein Element zugelassen)
- Anmerkungselemente (kein (null) Element oder mehrere Elemente zugelassen)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das EntitySet-Element angewendet 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
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das EntitySet-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 EntityContainer-Element mit drei EntitySet-Elementen gezeigt:
<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 Book-Entitätstyp 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 die Struktur eines Konzepts auf oberster Ebene dar, z. B. einen Kunden oder eine Bestellung, in einem konzeptionellen Modell. 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 die 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 eines Entitätssatzes 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 über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Key (kein (null) oder ein Element)
- Property (0 (null) oder mehr Elemente)
- NavigationProperty (kein Element (null) oder mehrere Elemente)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das EntityType-Element angewendet 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. |
Zusammenfassung | Nein | True oder False, je nachdem, ob der Entitätstyp ein abstrakter Typ ist. |
OpenType | Nein | True oder False abhängig davon, ob der Entitätstyp ein geöffneter 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 auf das EntityType-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
Das folgende Beispiel zeigt ein EntityType-Element mit drei Eigenschaftselementen 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 aufgezählten Typ dar.
Ein EnumType-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Element (Null oder mehr Elemente)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das EnumType-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Entitätstyps. |
IsFlags | Nein | True oder False, je nachdem, ob der Enumerationstyp als Satz von Flags verwendet werden kann. Der Standardwert ist False.. |
UnderlyingType | Nein | Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 oder Edm.SByte , der den Wertebereich des Typs definiert. Der standardmäßige zugrunde liegende Typ von Enumerationselementen ist Edm.Int32.. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das EnumType-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
Das folgende Beispiel zeigt ein EnumType-Element mit drei Memberelementen :
<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 der konzeptionellen 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 (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Parameter (kein Element (null) oder mehrere Elemente)
- DefiningExpression (kein (null) oder ein Element)
- ReturnType (Function) (Null oder ein Element)
- Anmerkungselemente (kein Element (null) 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 beides. 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 auf das Function-Element angewendet 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 auf das Function-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 Function-Element verwendet, um eine Funktion zu definieren, die die Anzahl der Jahre zurückgibt, seit ein Kursleiter eingestellt wurde.
<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 der konzeptionellen Schemadefinitionssprache (CSDL) stellt eine Funktion dar, die in der Datenquelle definiert ist, aber für Objekte über das konzeptionelle Modell 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.
Das FunctionImport-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element zugelassen)
- Parameter (kein Element (null) oder mehrere Elemente zugelassen)
- Anmerkungselemente (kein (null) Element oder mehrere Elemente zugelassen)
- ReturnType (FunctionImport) (Null oder mehr zulässige Elemente)
Ein Parameterelement sollte für jeden Parameter definiert werden, den die Funktion akzeptiert.
Ein Rückgabetyp für eine Funktion muss entweder mit dem ReturnType (FunctionImport)-Element oder dem ReturnType-Attribut (siehe unten) angegeben werden, aber nicht beides. Der Rückgabetypwert muss eine Auflistung von EdmSimpleType, EntityType oder ComplexType sein.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das FunctionImport-Element angewendet 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 des EntitySet die Entität sein, die der Auflistung angehört. Andernfalls darf das Attribut EntitySet nicht verwendet werden. |
IsComposable | Nein | Wenn der Wert auf "true" festgelegt ist, ist die Funktion schreibbar (Table-valued Function) und kann in einer LINQ-Abfrage verwendet werden. Die Standardeinstellung ist false. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das 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
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 einen Satz 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 eindeutig eine Entitätstypinstanz innerhalb eines Entitätssatzes 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 er auf mindestens eine der Eigenschaften eines Entitätstyps verweist.
Das Key-Element kann die folgenden untergeordneten Elemente aufweisen:
- PropertyRef (mindestens ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das Key-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 Entitätstyp namens "Book" definiert. Der Entitätsschlüssel wird durch Verweisen auf die ISBN-Eigenschaft des Entitätstyps 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>
Die ISBN-Eigenschaft ist eine gute Wahl für den Entitätsschlüssel, da eine Internationale Standardbuchnummer (ISBN) ein Buch eindeutig identifiziert.
Das folgende Beispiel zeigt einen Entitätstyp (Author), der über einen Entitätsschlüssel verfügt, der aus zwei Eigenschaften, Name und Adresse 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 Adresse für den Entitätsschlüssel ist eine angemessene Wahl, da zwei Autoren desselben Namens wahrscheinlich nicht an derselben Adresse leben. Dieser Entitätsschlüssel garantiert jedoch nicht absolut eindeutige Entitätsschlüssel in einem Entitätssatz. Das Hinzufügen einer Eigenschaft, z. B. AuthorId, die verwendet werden könnte, um einen Autor eindeutig zu identifizieren, wird in diesem Fall empfohlen.
Member-Element (CSDL)
Das Member-Element ist ein untergeordnetes Element des EnumType-Elements und definiert ein Element des aufgezählten Typs.
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das FunctionImport-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name des Members. |
Wert | Nein | Der Wert des Members. Standardmäßig weist das erste Element den Wert 0 auf, und der Wert der einzelnen aufeinanderfolgenden Aufzählungszeichen wird um 1 erhöht. Möglicherweise sind mehrere Member mit den gleichen Werten vorhanden. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das 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
Das folgende Beispiel zeigt ein EnumType-Element mit drei Memberelementen :
<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 in einem Kundenentitätstyp vorhanden und navigiert zu einer 1:n-Zuordnung zwischen Kunde und Bestellung. Da das Remotezuordnungsende für die Navigationseigenschaft viele (*) hat, ist der Datentyp eine Auflistung (von Order). Wenn eine Navigationseigenschaft, CustomerNavProp, im Entitätstyp " Order " vorhanden ist, wäre der Datentyp "Kunde ", da die Multiplikation des Remoteendes eins (1) ist.
Ein NavigationProperty-Element kann die folgenden untergeordneten Elemente aufweisen (in der angegebenen Reihenfolge):
- Dokumentation (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) 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 Rollenattribute übereinstimmen , die für eine der Zuordnungsende definiert sind (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 Rollenattribute übereinstimmen , die für eine der Zuordnungsende definiert sind (definiert im AssociationEnd-Element). |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das NavigationProperty-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 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 der konzeptionellen Schemadefinitionssprache (CSDL) definiert das Verhalten, das mit einer Zuordnung verbunden ist. Wenn das Action-Attributauf ein Ende einer Zuordnung festgelegt ist, werden verwandte Entitätstypen am anderen Ende der Zuordnung gelöscht, wenn der Entitätstyp am ersten Ende gelöscht wird. Wenn die Zuordnung zwischen zwei Entitätstypen eine Primärschlüssel-zu-Primärschlüsselbeziehung ist, wird ein geladenes abhängiges Objekt gelöscht, wenn das Prinzipalobjekt am anderen Ende der Zuordnung unabhängig von der OnDelete-Spezifikation gelöscht wird.
Hinweis
Das OnDelete-Element wirkt sich nur auf das Laufzeitverhalten einer Anwendung aus; es wirkt sich nicht auf das Verhalten in der Datenquelle aus. Das in der Datenquelle definierte Verhalten sollte dem in der Anwendung definierten Verhalten entsprechen.
Ein OnDelete-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das OnDelete-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Aktion | Ja | Kaskadierten oder Keine. Wenn "Cascade", werden abhängige Entitätstypen gelöscht, wenn der Prinzipalentitätstyp gelöscht wird. Wenn keine, werden abhängige Entitätstypen nicht gelöscht, wenn der Prinzipalentitätstyp gelöscht wird. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das Association-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
Das folgende Beispiel zeigt ein Association-Element , das die CustomerOrders-Zuordnung definiert. Das OnDelete-Element gibt an, dass alle Bestellungen , die sich auf einen bestimmten Kunden beziehen 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>
Parameter-Element (CSDL)
Das Parameterelement in der konzeptionellen Schemadefinitionssprache (CSDL) kann ein untergeordnetes Element des FunctionImport-Elements oder des Function-Elements sein.
FunctionImport-Element-Anwendung
Ein Parameterelement (als untergeordnetes Element des FunctionImport-Elements ) wird verwendet, um Eingabe- und Ausgabeparameter für Funktionsimporte zu definieren, die in CSDL deklariert werden.
Das Parameter-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element zugelassen)
- Anmerkungselemente (kein (null) Element 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 | In, Out oder InOut 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. |
Skalieren | Nein | Der Maßstab des Parameters. |
SRID | Nein | Räumlicher Systemverweisbezeichner. 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 auf das Parameter-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
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 Parameterelement (als untergeordnetes Element des Function-Elements ) definiert Parameter für Funktionen, die in einem konzeptionellen Modell definiert oder deklariert werden.
Das Parameter-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Documentation (kein (null) oder ein Element)
- CollectionType (kein (null) oder ein Element)
- ReferenceType (kein (null) oder ein Element)
- RowType (kein (null) oder ein Element)
Hinweis
Nur eines der Elemente "CollectionType", "ReferenceType" oder "RowType " kann ein untergeordnetes Element eines Property-Elements sein.
- Anmerkungselemente (kein (null) Element 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 |
Nullwerte zulässig | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. |
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | True oder False abhängig davon, ob der Eigenschaftswert als feste Längenzeichenfolge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalieren | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Räumlicher Systemreferenzbezeichner. Gültig nur für Eigenschaften von räumlichen Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | True oder False 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
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Parameter-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
Das folgende Beispiel zeigt ein Function-Element , das ein parameter untergeordnetes 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 Prinzipalelement in der konzeptionellen Schemadefinitionssprache (CSDL) ist ein untergeordnetes Element für das ReferentialConstraint-Element, das das Prinzipalende einer referenziellen Einschränkung definiert. Ein ReferentialConstraint-Element definiert Funktionen, die einer referenziellen Integritätseinschränkung 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 Hauptende 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, auf welche Schlüssel vom abhängigen Ende verwiesen werden.
Das Prinzipalelement kann über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- PropertyRef (mindestens ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das Principal-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Rolle | Ja | Der Name des Entitätstyps am Prinzipalende der Zuordnung. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Principal-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
Das folgende Beispiel zeigt ein ReferentialConstraint-Element , das Teil der Definition der PublishedBy-Zuordnung ist. Die Id-Eigenschaft des Publisher-Entitätstyps besteht aus dem 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 Eigenschaftselement in der konzeptionellen Schemadefinitionssprache (CSDL) kann ein untergeordnetes Element des EntityType-Elements, des ComplexType-Elements oder des RowType-Elements sein.
EntityType- und ComplexType-Element-Anwendungen
Eigenschaftselemente (als untergeordnete Elemente von EntityType oder ComplexType ) definieren die Form und Eigenschaften von Daten, die eine Entitätstypinstanz oder komplexe Typinstanz enthalten. 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 Eigenschaftselement kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):
- Dokumentationselement (kein (null) oder ein Element zugelassen)
- Anmerkungselemente (kein (null) Element oder mehrere Elemente zugelassen)
Die folgenden Facetten können auf ein Eigenschaftselement 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
Die Facetten können nur auf Eigenschaften des Typs 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. |
Nullwerte zulässig | 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 enthalten Nullable="False" sein. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | True oder False abhängig davon, ob der Eigenschaftswert als feste Längenzeichenfolge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalieren | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Räumlicher Systemreferenzbezeichner. Gültig nur für Eigenschaften von räumlichen Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | True oder False 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) kann auf das Property-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
Das folgende Beispiel zeigt ein EntityType-Element mit drei Eigenschaftselementen :
<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 Eigenschaftselementen :
<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
Eigenschaftselemente (als untergeordnete Elemente eines RowType-Elements ) definieren die Form und Merkmale von Daten, die an eine modelldefinierte Funktion übergeben oder zurückgegeben werden können.
Das Property-Element kann genau eines der folgenden untergeordneten Elemente aufweisen:
- CollectionType
- ReferenceType
- RowType
Das Property-Element kann über beliebige untergeordnete 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. |
Nullwerte zulässig | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In CSDL v1 muss eine komplexe Typeigenschaft verfügen Nullable="False" . |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | True oder False abhängig davon, ob der Eigenschaftswert als feste Längenzeichenfolge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalieren | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Räumlicher Systemverweisbezeichner. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | True oder False , je nachdem, 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 auf das Property-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
Das folgende Beispiel zeigt Property-Elemente , die zum Definieren der Form des Rückgabetyps einer modelldefinierten Funktion verwendet werden.
<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 der konzeptionellen Schemadefinitionssprache (CSDL) verweist auf eine Eigenschaft eines Entitätstyps, um anzugeben, 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 verwendet werden, um einen Entitätsschlüssel zu definieren.
- Das abhängige Ende oder Prinzipalende einer referenziellen Einschränkung.
Das PropertyRef-Element kann nur Anmerkungenelemente (null oder mehr) als untergeordnete Elemente aufweisen.
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 PropertyRef-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Name | Ja | Der Name der referenzierten Eigenschaft. |
Hinweis
Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das PropertyRef-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 Entitätstyp (Book) definiert. Der Entitätsschlüssel wird durch Verweisen auf die ISBN-Eigenschaft des Entitätstyps 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>
Im nächsten Beispiel werden zwei PropertyRef-Elemente verwendet, um anzugeben, dass zwei Eigenschaften (ID und PublisherId) das Prinzipal und abhängige Enden einer referenziellen Einschränkung sind.
<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)
Das ReferenceType-Element in der konzeptionellen Schemadefinitionssprache (CSDL) gibt einen Verweis auf einen Entitätstyp an. Das ReferenceType-Element kann ein untergeordnetes Element der folgenden Elemente sein:
- ReturnType (Funktion)
- Parameter
- CollectionType
Das ReferenceType-Element wird beim Definieren eines Parameters oder Rückgabetyps für eine Funktion verwendet.
Ein ReferenceType-Element kann die folgenden untergeordneten Elemente haben (in der Reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
In der folgenden Tabelle werden die Attribute beschrieben, die auf das ReferenceType-Element angewendet werden können.
Attributname | Ist erforderlich | Wert |
---|---|---|
Typ | Ja | Der Name des Entitätstyps, auf den verwiesen wird. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das ReferenceType-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
Das folgende Beispiel zeigt das ReferenzType-Element, das als untergeordnetes Element eines Parameterelements in einer modell definierten Funktion verwendet wird, die einen Verweis auf einen Person-Entitätstyp 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 ReferenzType-Element, das als untergeordnetes Element eines ReturnType (Function)-Elements in einer modell definierten Funktion verwendet wird, die einen Verweis auf einen Person-Entitätstyp 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 der konzeptionellen Schemadefinitionssprache (CSDL) definiert Funktionen, die einer referenziellen Integritätseinschränkung in einer relationalen Datenbank ähneln. 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 Hauptende 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 auf einem Entitätstyp verfügbar gemacht wird, auf eine Eigenschaft in einem anderen Entitätstyp verweist, definiert das ReferentialConstraint-Element eine Zuordnung zwischen den beiden Entitätstypen. Da das ReferentialConstraint-Element Informationen darüber bereitstellt, wie zwei Entitätstypen verknüpft sind, ist kein entsprechendes AssociationSetMapping-Element in der Zuordnungsspezifikationssprache (MSL) erforderlich. Eine Zuordnung zwischen zwei Entitätstypen, die keine Fremdschlüssel verfügbar gemacht haben, müssen über ein entsprechendes AssociationSetMapping-Element verfügen, um Zuordnungsinformationen der Datenquelle zuzuordnen.
Wenn ein Fremdschlüssel nicht für einen Entitätstyp verfügbar gemacht wird, kann das ReferentialConstraint-Element nur eine Primärschlüssel-zu-Primärschlüsseleinschränkung zwischen dem Entitätstyp und einem anderen Entitätstyp definieren.
Ein ReferentialConstraint-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Prinzipal (genau ein Element)
- Abhängig (genau ein Element)
- Anmerkungselemente (kein Element (null) oder mehrere Elemente)
Anwendbare Attribute
Das ReferentialConstraint-Element kann eine beliebige Anzahl von Anmerkungenattributen (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 (Function)-Element in der konzeptionellen 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 beliebige EdmSimpleType, Entitätstypen, komplexen Typ, Zeilentyp, Reftyp 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 wird nicht überprüft, wenn Sie einen Funktionsrückgabetyp mit dem Type-Attribut des ReturnType (Function)-Elements und eines der untergeordneten Elemente angeben.
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
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das ReturnType (Function)-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 Function-Element verwendet, um eine Funktion zu definieren, die die Anzahl der Jahre zurückgibt, in denen ein Buch gedruckt wurde. 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 -Element (FunctionImport) 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 des EntitySet die Entität sein, zu der die Auflistung gehört. Andernfalls darf das Attribut EntitySet nicht verwendet werden. |
Hinweis
Jede Anzahl von Anmerkungenattributen (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 verwendet, der 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 der konzeptionellen Schemadefinitionssprache (CSDL) definiert eine nicht benannte Struktur als Parameter oder Rückgabetyp für eine Funktion, die im konzeptionellen Modell definiert ist.
Ein RowType-Element kann das untergeordnete Element der folgenden Elemente sein:
- CollectionType
- Parameter
- ReturnType (Funktion)
Ein RowType-Element kann über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):
- Eigenschaft (ein oder mehrere Elemente)
- Anmerkungselemente (kein (null) oder mehrere Elemente)
Anwendbare Attribute
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das RowType-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 eine modelldefinierte Funktion gezeigt, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung von Zeilen zurückgibt (wie im RowType-Element angegeben).
<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 null oder mehr der folgenden untergeordneten Elemente enthalten:
- Verwenden
- EntityContainer
- EntityType
- Enumtype
- Zuordnung
- ComplexType
- Funktion
Ein Schemaelement kann null oder ein Anmerkungselement enthalten.
Hinweis
Das Function-Element und die Anmerkungenelemente sind nur in CSDL v2 und höher zulässig.
Das Schema-Element verwendet das Namespace-Attribut , um den Namespace für den Entitätstyp, den komplexen Typ und die Zuordnungsobjekte in einem konzeptionellen Modell zu definieren. Innerhalb eines Namespace müssen alle Objekte eine eindeutige Bezeichnung aufweisen. Namespaces können mehrere Schemaelemente und mehrere CSDL-Dateien umfassen.
Ein konzeptioneller Modellnamespace unterscheidet sich vom XML-Namespace des Schemaelements . Ein konzeptioneller Modellnamespace (wie durch das Namespace-Attribut definiert) ist ein logischer Container für Entitätstypen, komplexe Typen und Zuordnungstypen. Der XML-Namespace (angegeben durch das xmlns-Attribut ) eines Schemaelements ist der Standardnamespace für untergeordnete Elemente und Attribute des Schemaelements . XML-Namespaces des Formulars https://schemas.microsoft.com/ado/YYYY/MM/edm
(wobei YYYY und MM ein Jahr und monatlich darstellen) sind für CSDL reserviert. Benutzerdefinierte Elemente und Attribute können nicht in Namespaces mit diesem Format vorhanden sein.
Anwendbare Attribute
Die folgende Tabelle beschreibt die Attribute, die auf das Schema-Element angewendet 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. Wenn sich beispielsweise ein EntityType namens Customer im Simple.Example.Model-Namespace befindet, ist der vollqualifizierte Name des EntityType 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 kann nicht mit dem Wert für das Namespace-Attribut im SSDL-Schemaelement identisch sein. |
Alias | Nein | Ein anstelle der Namespacebezeichnung verwendeter Bezeichner. Wenn sich beispielsweise ein EntityType mit dem Namen "Customer" im Simple.Example.Model-Namespace befindet und der Wert des Alias-Attributs Modell ist, können Sie Model.Customer als vollqualifizierter Name des EntityType verwenden. |
Hinweis
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Schema-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 Schemaelement gezeigt, 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 der konzeptionellen Schemadefinitionssprache (CSDL) stellt einen Verweis auf einen vorhandenen benannten Typ bereit. Das TypeRef-Element kann ein untergeordnetes Element des CollectionType-Elements sein, das verwendet wird, um anzugeben, dass eine Funktion eine Auflistung als Parameter oder Rückgabetyp aufweist.
Ein TypeRef-Element kann die folgenden untergeordneten Elemente aufweisen (in der Reihenfolge aufgeführt):
- Dokumentation (kein (null) oder ein Element)
- Anmerkungselemente (kein Element (null) 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. |
Nullwerte zulässig | Nein | True (Standardwert) oder False abhängig davon, ob die Eigenschaft einen NULL-Wert haben kann. [!NOTE] |
> In CSDL v1 muss eine komplexe Typeigenschaft enthalten Nullable="False" sein. |
||
DefaultValue | Nein | Der Standardwert der Eigenschaft. |
MaxLength | Nein | Maximale Länge des Eigenschaftswerts. |
FixedLength | Nein | True oder False abhängig davon, ob der Eigenschaftswert als feste Längenzeichenfolge gespeichert wird. |
Genauigkeit | Nein | Die Genauigkeit des Eigenschaftswerts. |
Skalieren | Nein | Die Skalierung des Eigenschaftswerts. |
SRID | Nein | Räumlicher Systemreferenzbezeichner. Gültig nur für Eigenschaften von räumlichen Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server). |
Unicode | Nein | True oder False 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
Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das CollectionType-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 eine modelldefinierte Funktion gezeigt, die das TypeRef-Element (als untergeordnetes Element eines CollectionType-Elements ) verwendet, um anzugeben, dass die Funktion eine Auflistung von Abteilungs-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 der konzeptionellen Schemadefinitionssprache (CSDL) importiert den Inhalt eines konzeptionellen Modells, das in einem anderen Namespace vorhanden ist. Durch Festlegen des Werts des Namespace-Attributs können Sie auf Entitätstypen, komplexe Typen und Zuordnungstypen verweisen, die in einem anderen konzeptionellen Modell definiert sind. Mehr als ein Using-Element kann ein untergeordnetes Element eines Schemaelements sein.
Hinweis
Das Using-Element in CSDL funktioniert nicht genau wie eine Using-Anweisung in einer Programmiersprache. Wenn Sie einen Namespace mit einer Using-Anweisung in einer Programmiersprache importieren, haben Sie keine Auswirkungen auf Objekte im ursprünglichen Namespace. 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 (null) oder ein Element zugelassen)
- Anmerkungselemente (kein (null) Element oder mehrere Elemente zugelassen)
Anwendbare Attribute
Die folgende Tabelle beschreibt die Attribute, die auf das Using-Element angewendet 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 auf das Using-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 das Using-Element veranschaulicht, mit dem ein Namespace importiert wird, der an anderer Stelle definiert ist. Beachten Sie, dass der Namespace für das angezeigte Schemaelement ist BooksModel
. Die Address
Eigenschaft auf dem Publisher
EntityType ist ein komplexer Typ, der ExtendedBooksModel
im Namespace definiert ist (importiert mit dem Using-Element ).
<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. Metadaten, die in Anmerkungselementen enthalten sind, können zur Laufzeit mithilfe von Klassen im Namespace System.Data.Metadata.Edm aufgerufen 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 der .NET Framework Version 4 können Metadaten, die in Anmerkungselementen enthalten sind, zur Laufzeit mithilfe von Klassen im System.Data.Metadata.Edm-Namespace aufgegriffen 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)
Konzeptionelle Schemadefinitionssprache (CSDL) unterstützt eine Reihe abstrakter primitiver Datentypen namens EDMSimpleTypes, die Eigenschaften in einem konzeptionellen Modell definieren. EDMSimpleTypes sind Proxys für primitive Datentypen , die in der Speicher- oder Hostingumgebung unterstützt werden.
In der nachfolgenden Tabelle werden die von CSDL unterstützten primitiven Datentypen aufgeführt. In der Tabelle sind auch die Facetten 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 "true " oder "false". | 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 Gleitkommanummer mit einer Genauigkeit von 15 Ziffern | 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.Geographie | Nullable, Default, SRID | |
Edm.GeographyPoint | Nullable, Default, SRID | |
Edm.GeographyLineString | Nullable, Default, SRID | |
Edm.GeographyPolygon | Nullable, Default, SRID | |
Edm.GeographyMultiPoint | Nullable, Default, SRID | |
Edm.GeographyMultiLineString | Nullable, Default, SRID | |
Edm.GeographyMultiPolygon | Nullable, Default, SRID | |
Edm.GeographyCollection | Nullable, Default, SRID | |
Edm.Geometry | Nullable, Default, SRID | |
Edm.GeometryPoint | Nullable, Default, SRID | |
Edm.GeometryLineString | Nullable, Default, SRID | |
Edm.GeometryPolygon | Nullable, Default, SRID | |
Edm.GeometryMultiPoint | Nullable, Default, SRID | |
Edm.GeometryMultiLineString | Nullable, Default, SRID | |
Edm.GeometryMultiPolygon | Nullable, Default, SRID | |
Edm.GeometryCollection | Nullable, 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. Einige unten aufgeführte Facetten werden vom Entity Framework verwendet, wenn eine Datenbank aus einem konzeptionellen Modell generiert wird.
Hinweis
Informationen zu Datentypen in einem konzeptionellen Modell finden Sie unter Konzeptionelle Modelltypen (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 |
Nullwerte zulässig | Gibt an, ob die Eigenschaft einen Nullwert aufweisen kann. | Alle EDMSimpleType-Eigenschaften | Ja | Ja |
Genauigkeit | Gibt für Eigenschaften des Typs Dezimalwert die Anzahl der Ziffern an, über die ein Eigenschaftswert verfügen kann. Gibt für Eigenschaften des Typs "Time", "DateTime" und "DateTimeOffset" die Anzahl der Ziffern für den Teil der Sekunden des Eigenschaftswerts an. | Edm.DateTime, Edm.DateTimeOffset, Edm.Dezimal, Edm.Time | Ja | Nein |
Skalieren | Gibt die Anzahl der Dezimalstellen für den Eigenschaftswert an. | Edm.Decimal | Ja | Nein |
SRID | Gibt die Räumliche Systemreferenzsystem-ID 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 der Datenbank den Wert des StoreGeneratedPattern-Attributs in einem Eigenschaftselement, 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. Ein Wert von Identity erzeugt eine Datenbankspalte mit einem Identitätswert, der in der Datenbank generiert wird. Ein Wert von 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>