SSDL-Spezifikation

Die Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) ist eine XML-basierte Sprache, die das Speichermodell einer Entity Framework-Anwendung beschreibt.

In einer Entität Framework-Anwendung wird Speichermodellmetadaten aus einer SSDL-Datei (geschrieben in SSDL) in eine Instanz der System.Data.Metadata.Edm.StoreItemCollection geladen und mithilfe von Methoden in der System.Data.Metadata.Edm.MetadataWorkspace-Klasse zugänglich. Entity Framework verwendet Speichermodellmetadaten, um Abfragen gegen das konzeptionelle Modell zu speicherspezifischen Befehlen zu übersetzen.

Der Entity Framework Designer (EF Designer) speichert Speichermodellinformationen in einer .edmx-Datei zur Entwurfszeit. Beim Buildvorgang verwendet der Entitäts-Designer Informationen in einer .edmx-Datei, um die SSDL-Datei zu erstellen, die von Entity Framework zur Laufzeit benötigt wird.

Die verschiedenen Versionen von SSDL werden durch XML-Namespaces unterschieden.

SSDL-Version XML-Namespace
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Zuordnungselement (SSDL)

Ein Zuordnungselement in der Speicherschemadefinitionssprache (SSDL) gibt Tabellenspalten an, die an einer Fremdschlüsseleinschränkung in der zugrunde liegenden Datenbank teilnehmen. Zwei erforderliche untergeordnete End-Elemente geben die Tabellen an den Enden der Zuordnung und die Multiplizität an jedem Ende an. Ein optionales ReferentialConstraint-Element gibt die Prinzipal- und die abhängigen Enden der Zuordnung sowie die teilnehmenden Spalten an. Wenn kein ReferentialConstraint-Element vorhanden ist, muss ein AssociationSetMapping-Element verwendet werden, um die Spaltenzuordnungen für die Zuordnung anzugeben.

Das Association-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • End (genau zwei Elemente)
  • ReferentialConstraint (kein (null) oder ein Element)
  • Anmerkungselemente (kein (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 entsprechenden Fremdschlüsseleinschränkung in der zugrunde liegenden Datenbank.

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Association-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein Zuordnungselement , das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders Fremdschlüsseleinschränkung teilnehmen:

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

AssociationSet-Element (SSDL)

Das AssociationSet-Element in der Speicherschemadefinitionssprache (SSDL) stellt eine Fremdschlüsseleinschränkung zwischen zwei Tabellen in der zugrunde liegenden Datenbank dar. Die Tabellenspalten, die an der Fremdschlüsseleinschränkung teilnehmen, werden in einem Association-Element angegeben. Das Association-Element, das einem bestimmten AssociationSet-Element entspricht, wird im Association-Attribut desAssociationSet-Elements angegeben.

SSDL-Zuordnungssätze werden CSDL-Zuordnungssätzen durch ein AssociationSetMapping-Element zugeordnet. Wenn die CSDL-Zuordnung für einen bestimmten CSDL-Zuordnungssatz jedoch mithilfe eines ReferentialConstraint-Elements definiert wird, ist kein entsprechendes AssociationSetMapping-Element erforderlich. Wenn ein AssociationSetMapping-Element vorhanden ist, wird die zuordnung, die definiert wird, durch das ReferentialConstraint-Element außer Kraft gesetzt.

Das AssociationSet-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • End (kein (null) oder zwei Elemente)
  • Anmerkungselemente (kein (null) oder mehrere Elemente)

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 der Fremdschlüsseleinschränkung, die der Zuordnungssatz darstellt.
Zuordnung Ja Der Name der Zuordnung, die die Spalten definiert, die an der Fremdschlüsseleinschränkung teilnehmen.

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das AssociationSet-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein AssociationSet-Element , das die FK_CustomerOrders Fremdschlüsseleinschränkung in der zugrunde liegenden Datenbank darstellt:

 <AssociationSet Name="FK_CustomerOrders"
                 Association="ExampleModel.Store.FK_CustomerOrders">
   <End Role="Customers" EntitySet="Customers" />
   <End Role="Orders" EntitySet="Orders" />
 </AssociationSet>

CollectionType-Element (SSDL)

Das CollectionType-Element in der Speicherschemadefinitionssprache (SSDL) gibt an, dass der Rückgabetyp einer Funktion eine Auflistung ist. Das CollectionType-Element ist ein untergeordnetes Element des ReturnType-Elements. Der Typ der Auflistung wird mithilfe des untergeordneten RowType-Elements angegeben:

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 SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird eine Funktion gezeigt, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung von Zeilen zurückgibt.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

CommandText-Element (SSDL)

Das CommandText-Element in der Speicherschemadefinitionssprache (SSDL) ist ein untergeordnetes Element des Function-Elements, mit dem Sie eine SQL-Anweisung definieren können, die in der Datenbank ausgeführt wird. Mit dem CommandText-Element können Sie Funktionen hinzufügen, die einer gespeicherten Prozedur in der Datenbank ähnlich sind, sie definieren jedoch das CommandText-Element im Speichermodell.

Das CommandText-Element kann nicht über untergeordnete Elemente verfügen. Der Textkörper des CommandText-Elements muss eine gültige SQL-Anweisung für die zugrunde liegende Datenbank sein.

Es gelten keine Attribute für das CommandText-Element .

Beispiel

Das folgende Beispiel zeigt ein Function-Element mit einem untergeordneten CommandText-Element . Stellen Sie die Funktion "UpdateProductInOrder " als Methode im ObjectContext zur Verfügung, indem Sie sie in das konzeptionelle Modell importieren.  

 <Function Name="UpdateProductInOrder" IsComposable="false">
   <CommandText>
     UPDATE Orders
     SET ProductId = @productId
     WHERE OrderId = @orderId;
   </CommandText>
   <Parameter Name="productId"
              Mode="In"
              Type="int"/>
   <Parameter Name="orderId"
              Mode="In"
              Type="int"/>
 </Function>

DefiningQuery-Element (SSDL)

Mit dem DefinitionQuery-Element in der Speicherschemadefinitionssprache (SSDL) können Sie eine SQL-Anweisung direkt in der zugrunde liegenden Datenbank ausführen. Das DefinedQuery-Element wird häufig wie eine Datenbankansicht verwendet, aber die Ansicht wird im Speichermodell anstelle der Datenbank definiert. Die in einem DefinedQuery-Element definierte Ansicht kann einem Entitätstyp im konzeptionellen Modell über ein EntitySetMapping-Element zugeordnet werden. Diese Zuordnungen sind schreibgeschützt.  

Die folgende SSDL-Syntax zeigt die Deklaration eines EntitySet gefolgt von dem DefinitionsQuery-Element , das eine Abfrage enthält, die zum Abrufen der Ansicht verwendet wird.

 <Schema>
     <EntitySet Name="Tables" EntityType="Self.STable">
         <DefiningQuery>
           SELECT  TABLE_CATALOG,
                   'test' as TABLE_SCHEMA,
                   TABLE_NAME
           FROM    INFORMATION_SCHEMA.TABLES
         </DefiningQuery>
     </EntitySet>
 </Schema>

Sie können gespeicherte Prozeduren im Entity Framework verwenden, um Lesezugriffsszenarien über Ansichten zu aktivieren. Sie können entweder eine Datenquellenansicht oder eine Entitäts-SQL-Ansicht als Basistabelle zum Abrufen von Daten und zur Änderungsverarbeitung durch gespeicherte Prozeduren verwenden.

Sie können das DefinitionQuery-Element verwenden, um Microsoft SQL Server Compact 3.5 zu zielen. Obwohl SQL Server Compact 3.5 gespeicherte Prozeduren nicht unterstützt, können Sie ähnliche Funktionen mit dem DefinitionsQuery-Element implementieren. Es kann auch beim Erstellen gespeicherter Prozeduren nützlich sein, um einen Konflikt zwischen den in der Programmiersprache und den in der Datenquelle verwendeten Datentypen zu lösen. Sie können eine DefinitionQuery schreiben, die einen bestimmten Satz von Parametern verwendet und dann eine gespeicherte Prozedur mit einem anderen Satz von Parametern aufruft, z. B. eine gespeicherte Prozedur, die Daten löscht.

Abhängiges Element (SSDL)

Das abhängige Element in der Speicherschemadefinitionssprache (SSDL) ist ein untergeordnetes Element für das ReferentialConstraint-Element, das das abhängige Ende einer Fremdschlüsseleinschränkung definiert (auch als referenzielle Einschränkung bezeichnet). Das abhängige Element gibt die Spalte (oder Spalten) in einer Tabelle an, die auf eine Primärschlüsselspalte (oder Spalten) verweist. PropertyRef-Elemente geben an, auf welche Spalten verwiesen wird. Das Principal-Element gibt die Primärschlüsselspalten an, auf die durch Spalten verwiesen wird, die im Abhängigen Element angegeben sind.

Das abhängige Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):

  • PropertyRef (ein oder mehrere Elemente)
  • Anmerkungselemente (kein (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 gleiche Wert wie das Role-Attribut (sofern verwendet) des entsprechenden Endelements; andernfalls der Name der Tabelle, die die Referenzierungsspalte enthält.

Hinweis

Eine beliebige Anzahl von Anmerkungsattributen (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 Association-Element, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders Fremdschlüsseleinschränkung teilnehmen. Das abhängige Element gibt die Spalte "CustomerId " der Tabelle "Order " als abhängiges Ende der Einschränkung an.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Documentation-Element (SSDL)

Das Documentation-Element in der Speicherschemadefinitionssprache (SSDL) kann verwendet werden, um Informationen zu einem Objekt bereitzustellen, das in einem übergeordneten Element definiert ist.

Das Documentation-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):

  • Zusammenfassung: Eine kurze Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
  • LongDescription: Eine umfassende Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)

Anwendbare Attribute

Eine beliebige Anzahl von Anmerkungsattributen (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

Das folgende Beispiel zeigt das Documentation-Element als untergeordnetes Element eines EntityType-Elements.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

End-Element (SSDL)

Das End-Element in der Speicherschemadefinitionssprache (SSDL) gibt die Tabelle und die Anzahl der Zeilen an einem Ende einer Fremdschlüsseleinschränkung in der zugrunde liegenden Datenbank an. Das End-Element kann ein untergeordnetes Element des Association-Elements oder des AssociationSet-Elements sein. In jedem dieser Fälle sind andere untergeordnete Elemente und anwendbare Attribute die möglich.

Das End-Element als untergeordnetes Objekt des Association-Elements

Ein End-Element (als untergeordnetes Element des Association-Elements ) gibt die Tabelle und die Anzahl der Zeilen am Ende einer Fremdschlüsseleinschränkung mit den Attributen Typ und Multiplizität an. Die Enden einer Fremdschlüsseleinschränkung sind als Teil einer SSDL-Zuordnung definiert. Eine SSDL-Zuordnung muss genau zwei Enden aufweisen.

Ein End-Element kann die folgenden untergeordneten Elemente aufweisen (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 vollqualifizierte Name der SSDL-Entitätenmenge, die sich am Ende der Fremdschlüsseleinschränkung befindet.
Rolle Nein Der Wert des Role-Attributs im Prinzipal- oder abhängigen Element des entsprechenden ReferentialConstraint-Elements (sofern verwendet).
Multiplizität Ja 1, 0..1 oder * abhängig von der Anzahl der Zeilen, die am Ende der Fremdschlüsseleinschränkung stehen können.
1 gibt an, dass genau eine Zeile am End der Fremdschlüsseleinschränkung vorhanden ist.
0..1 gibt an, dass null oder eine Zeile am End der Fremdschlüsseleinschränkung vorhanden ist.
* gibt an, dass null, eine oder mehrere Zeilen am End der Fremdschlüsseleinschränkung vorhanden sind.

Hinweis

Eine beliebige Anzahl von Anmerkungsattributen (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 Association-Element , das die FK_CustomerOrders Fremdschlüsseleinschränkung definiert. Die auf jedem End-Element angegebenen Mehrwertwerte deuten darauf hin, dass viele Zeilen in der Tabelle "Orders" einer Zeile in der Tabelle "Kunden" zugeordnet werden können, aber nur eine Zeile in der Tabelle "Kunden" kann einer Zeile in der Tabelle "Bestellungen" zugeordnet werden. Darüber hinaus gibt das OnDelete-Element an, dass alle Zeilen in der Tabelle Orders , die auf eine bestimmte Zeile in der Tabelle "Kunden " verweisen, gelöscht werden, wenn die Zeile in der Tabelle " Kunden " gelöscht wird.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Das End-Element als untergeordnetes Objekt des AssociationSet-Elements

Das End-Element (als untergeordnetes Element des AssociationSet-Elements ) gibt eine Tabelle an einem Ende einer Fremdschlüsseleinschränkung in der zugrunde liegenden Datenbank an.

Ein End-Element kann die folgenden untergeordneten Elemente aufweisen (in der reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • Anmerkungselemente (kein (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 AssociationSet-Elements handelt.

Attributname Ist erforderlich Wert
EntitySet Ja Der Name der SSDL-Entitätenmenge, die sich am Ende der Fremdschlüsseleinschränkung befindet.
Rolle Nein Der Wert eines der Rollenattribute , die für ein Endelement des entsprechenden Association-Elements angegeben sind.

Hinweis

Eine beliebige Anzahl von Anmerkungsattributen (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 einem AssociationSet-Element mit zwei Endelementen :

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityContainer-Element (SSDL)

Ein EntityContainer-Element in der Speicherschemadefinitionssprache (SSDL) beschreibt die Struktur der zugrunde liegenden Datenquelle in einer Entity Framework-Anwendung: SSDL-Entitätssätze (definiert in EntitySet-Elementen) stellen Tabellen in einer Datenbank dar, SSDL-Entitätstypen (definiert in EntityType-Elementen) stellen Zeilen in einer Tabelle dar, und Zuordnungssätze (definiert in AssociationSet-Elementen) stellen Fremdschlüsseleinschränkungen in einer Datenbank dar. Durch das EntityContainerMapping-Element wird einem Speichermodell-Entitätscontainer ein konzeptioneller Modellentitätscontainer zugeordnet.

Ein EntityContainer-Element kann null oder ein Dokumentationselement aufweisen. Wenn ein Documentation-Element vorhanden ist, muss es allen anderen untergeordneten Elementen vorangehen.

Ein EntityContainer-Element kann null oder mehr der folgenden untergeordneten Elemente aufweisen (in der aufgeführten Reihenfolge):

  • EntitySet
  • AssociationSet
  • Anmerkungselemente

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die auf das EntityContainer-Element angewendet werden können.

Attributname Ist erforderlich Wert
Name Ja Der Name des Entitätscontainers. Dieser Name darf keine Punkte (.) enthalten.

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 SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird ein EntityContainer-Element gezeigt, das zwei Entitätssätze und einen Zuordnungssatz definiert. Beachten Sie, dass die Namen des Entitätstyps und des Zuordnungstyps mit dem Namespace des konzeptionellen Modellnamens qualifiziert werden.

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntitySet-Element (SSDL)

Ein EntitySet-Element in der Speicherschemadefinitionssprache (SSDL) stellt eine Tabelle oder Ansicht in der zugrunde liegenden Datenbank dar. Ein EntityType-Element in SSDL stellt eine Zeile in der Tabelle oder der Ansicht dar. Das EntityType-Attribut eines EntitySet-Elements gibt den bestimmten SSDL-Entitätstyp an, der Zeilen in einem SSDL-Entitätssatz darstellt. Die Zuordnung einer CSDL-Entitätenmenge zu einer SSDL-Entitätenmenge wird in einem EntitySetMapping-Element angegeben.

Das EntitySet-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • DefiningQuery (kein (null) oder ein Element)
  • Anmerkungselemente

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die auf das EntitySet-Element angewendet werden können.

Hinweis

Einige Attribute (hier nicht aufgeführt) können mit dem Store-Alias qualifiziert werden. Diese Attribute werden vom Modellaktualisierungs-Assistenten beim Aktualisieren eines Modells verwendet.

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.
Schema Nein Das Datenbankschema.
Tabelle Nein Die Datenbanktabelle.

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 SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird ein EntityContainer-Element mit zwei EntitySet-Elementen und einem AssociationSet-Element gezeigt:

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityType-Element (SSDL)

Ein EntityType-Element in der Speicherschemadefinitionssprache (SSDL) stellt eine Zeile in einer Tabelle oder Ansicht der zugrunde liegenden Datenbank dar. Ein EntitySet-Element in SSDL stellt die Tabelle oder Ansicht dar, in der Zeilen enthalten sind. Das EntityType-Attribut eines EntitySet-Elements gibt den bestimmten SSDL-Entitätstyp an, der Zeilen in einem SSDL-Entitätssatz darstellt. Die Zuordnung eines SSDL-Entitätstyps zu einem CSDL-Entitätstyp wird in einem EntityTypeMapping-Element angegeben.

Das EntityType-Element kann die folgenden untergeordneten Elemente aufweisen (in der Reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • Key (kein (null) oder ein Element)
  • Anmerkungselemente

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. Dieser Wert ist normalerweise der gleiche wie der Name der Tabelle, in der der Entitätstyp eine Zeile darstellt. Dieser Wert darf keine Punkte (.) enthalten.

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das EntityType-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird ein EntityType-Element mit zwei Eigenschaften gezeigt:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Function-Element (SSDL)

Das Function-Element in der Speicherschemadefinitionssprache (SSDL) gibt eine gespeicherte Prozedur an, die in der zugrunde liegenden Datenbank vorhanden ist.

Das Function-Element kann die folgenden untergeordneten Elemente aufweisen (in der Reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • Parameter (Null oder mehr)
  • CommandText (Null oder eine)
  • ReturnType (Null oder mehr)
  • Anmerkungselemente (kein (null) oder mehrere Elemente)

Ein Rückgabetyp für eine Funktion muss entweder mit dem ReturnType-Element oder dem ReturnType-Attribut (siehe unten) angegeben werden, aber nicht beides.

Gespeicherte Prozeduren, die im Speichermodell angegeben sind, können in das konzeptionelle Modell einer Anwendung importiert werden. Weitere Informationen finden Sie unter Abfragen mit gespeicherten Prozeduren. Das Function-Element kann auch verwendet werden, um benutzerdefinierte Funktionen im Speichermodell zu definieren.  

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die auf das Function-Element angewendet werden können.

Hinweis

Einige Attribute (hier nicht aufgeführt) können mit dem Store-Alias qualifiziert werden. Diese Attribute werden vom Modellaktualisierungs-Assistenten beim Aktualisieren eines Modells verwendet.

Attributname Ist erforderlich Wert
Name Ja Name der gespeicherten Prozedur
ReturnType Nein Der Rückgabetyp der gespeicherten Prozedur.
Aggregat Nein True , wenn die gespeicherte Prozedur einen Aggregatwert zurückgibt; andernfalls False.
Builtin Nein True , wenn die Funktion eine integrierte1-Funktion ist; andernfalls False.
StoreFunctionName Nein Name der gespeicherten Prozedur
NiladicFunction Nein True , wenn die Funktion eine Niladic2-Funktion ist; False andernfalls.
IsComposable Nein True , wenn die Funktion eine3-Funktion ist; False andernfalls.
ParameterTypeSemantics Nein Die Enumeration, die die Typsemantik definiert, die zum Auflösen von Funktionsüberladungen verwendet wird. Die Enumeration ist im Anbietermanifest für jede Funktionsdefinition definiert. Der Standardwert ist AllowImplicitConversion.
Schema Nein Der Name des Schemas, in dem die gespeicherte Prozedur definiert ist.

1 Eine integrierte Funktion ist eine Funktion, die in der Datenbank definiert ist. Informationen zu Funktionen, die im Speichermodell definiert sind, finden Sie unter CommandText-Element (SSDL).

2 Eine niladische Funktion ist eine Funktion, die keine Parameter akzeptiert und beim Aufruf keine Klammern erfordert.

3 Zwei Funktionen können erstellt werden, wenn die Ausgabe einer Funktion die Eingabe für die andere Funktion sein kann.

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Function-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein Function-Element , das der gespeicherten UpdateOrderQuantity-Prozedur entspricht. Die gespeicherte Prozedur akzeptiert zwei Parameter und gibt keinen Wert zurück.

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Key-Element (SSDL)

Das Key-Element in der Speicherschemadefinitionssprache (SSDL) stellt den Primärschlüssel einer Tabelle in der zugrunde liegenden Datenbank dar. Key ist ein untergeordnetes Element eines EntityType-Elements, das eine Zeile in einer Tabelle darstellt. Der Primärschlüssel wird im Key-Element definiert, indem sie auf ein oder mehrere Eigenschaftselemente verweisen, die im EntityType-Element definiert sind.

Das Key-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):

  • PropertyRef (ein oder mehrere Elemente)
  • Anmerkungselemente

Es gelten keine Attribute für das Key-Element .

Beispiel

Das folgende Beispiel zeigt ein EntityType-Element mit einem Schlüssel, der auf eine Eigenschaft verweist:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

OnDelete-Element (SSDL)

Das OnDelete-Element in der Speicherschemadefinitionssprache (SSDL) spiegelt das Datenbankverhalten wider, wenn eine Zeile, die an einer Fremdschlüsseleinschränkung teilnimmt, gelöscht wird. Wenn die Aktion auf " Cascade" festgelegt ist, werden zeilen, die auf eine Zeile verweisen, die gelöscht wird, auch gelöscht. Wenn die Aktion auf "Keine" festgelegt ist, werden Zeilen, die auf eine Zeile verweisen, die gelöscht wird, nicht auch gelöscht. Ein OnDelete-Element ist ein untergeordnetes Element eines End-Elements.

Ein OnDelete-Element kann über die folgenden untergeordneten Elemente verfügen (in der reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • Anmerkungselemente (kein (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. (Der Wert " Eingeschränkt " ist gültig, weist jedoch das gleiche Verhalten wie "None" auf.)

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das OnDelete-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein Zuordnungselement , das die FK_CustomerOrders Fremdschlüsseleinschränkung definiert. Das OnDelete-Element gibt an, dass alle Zeilen in der Tabelle "Bestellungen ", die auf eine bestimmte Zeile in der Tabelle "Kunden " verweisen, gelöscht werden, wenn die Zeile in der Tabelle " Kunden " gelöscht wird.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Parameter-Element (SSDL)

Das Parameterelement in der Speicherschemadefinitionssprache (SSDL) ist ein untergeordnetes Element des Function-Elements, das Parameter für eine gespeicherte Prozedur in der Datenbank angibt.

Das Parameter-Element kann die folgenden untergeordneten Elemente aufweisen (in der Reihenfolge aufgeführt):

  • Dokumentation (kein (null) oder ein Element)
  • Anmerkungselemente (kein (null) oder mehrere Elemente)

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.
Mode Nein In, Out oder InOut abhängig davon, ob der Parameter ein Eingabe-, Ausgabe- oder Eingabe-/Ausgabeparameter ist.
MaxLength Nein Die maximale Länge des Parameters.
Genauigkeit Nein Die Genauigkeit des Parameters.
Skalieren Nein Der Maßstab des Parameters.
SRID Nein Räumlicher Systemreferenzbezeichner. Gültig nur für Parameter von räumlichen Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server).

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 SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein Function-Element mit zwei Parameterelementen , die Eingabeparameter angeben:

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Prinzipalelement (SSDL)

Das Prinzipalelement in der Speicherschemadefinitionssprache (SSDL) ist ein untergeordnetes Element für das ReferentialConstraint-Element, das das Prinzipalende einer Fremdschlüsseleinschränkung definiert (auch als referenzielle Einschränkung bezeichnet). Das Principal-Element gibt die Primärschlüsselspalte (oder Spalten) in einer Tabelle an, auf die von einer anderen Spalte (oder Spalten) verwiesen wird. PropertyRef-Elemente geben an, auf welche Spalten verwiesen werden. Das abhängige Element gibt Spalten an, die auf die Primärschlüsselspalten verweisen, die im Prinzipalelement angegeben sind.

Das Prinzipalelement kann über die folgenden untergeordneten Elemente verfügen (in der Reihenfolge aufgeführt):

  • PropertyRef (ein oder mehrere Elemente)
  • Anmerkungselemente (kein (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 gleiche Wert wie das Role-Attribut (falls verwendet) des entsprechenden Endelements; andernfalls ist der Name der Tabelle, die die referenzierte Spalte enthält.

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 Association-Element, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders Fremdschlüsseleinschränkung teilnehmen. Das Prinzipalelement gibt die Spalte "CustomerId" der Kundentabelle als Hauptende der Einschränkung an.

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Property-Element (SSDL)

Das Eigenschaftselement in der Speicherschemadefinitionssprache (SSDL) stellt eine Spalte in einer Tabelle in der zugrunde liegenden Datenbank dar. Eigenschaftselemente sind untergeordnete Elemente von EntityType-Elementen, die Zeilen in einer Tabelle darstellen. Jedes Eigenschaftselement , das in einem EntityType-Element definiert ist, stellt eine Spalte dar.

Ein Eigenschaftselement kann keine untergeordneten Elemente aufweisen.

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 zugehörigen Spalte.
Typ Ja Der Typ der zugehörigen Spalte.
Nullwerte zulässig Nein True (standardwert) oder False abhängig davon, ob die entsprechende Spalte einen Nullwert aufweisen kann.
DefaultValue Nein Der Standardwert der zugehörigen Spalte.
MaxLength Nein Maximale Länge der zugehörigen Spalte.
FixedLength Nein True oder False abhängig davon, ob der entsprechende Spaltenwert als feste Längenzeichenfolge gespeichert wird.
Genauigkeit Nein Die Genauigkeit der zugehörigen Spalte.
Skalieren Nein Die Dezimalstellenanzahl der zugehörigen Spalte.
Unicode Nein True oder False abhängig davon, ob der entsprechende Spaltenwert als Unicode-Zeichenfolge gespeichert wird.
Sortierung Nein Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird.
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).
Storegeneratedpattern Nein Keine, Identität (wenn der entsprechende Spaltenwert eine Identität ist, die in der Datenbank generiert wird), oder berechnet (wenn der entsprechende Spaltenwert in der Datenbank berechnet wird). Für RowType-Eigenschaften nicht gültig.

Hinweis

Jede Anzahl von Anmerkungenattributen (benutzerdefinierte XML-Attribute) kann auf das Property-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird ein EntityType-Element mit zwei untergeordneten Eigenschaftselementen gezeigt:

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

PropertyRef-Element (SSDL)

Das PropertyRef-Element in der Speicherschemadefinitionssprache (SSDL) verweist auf eine Eigenschaft, die auf einem EntityType-Element definiert ist, um anzugeben, dass die Eigenschaft eine der folgenden Rollen ausführt:

  • Sind Sie Teil des Primärschlüssels der Tabelle, die der EntityType darstellt. Ein oder mehrere PropertyRef-Elemente können verwendet werden, um einen Primärschlüssel zu definieren. Weitere Informationen finden Sie unter Key-Element.
  • Sie ist das abhängige Ende oder das Prinzipalende einer referenziellen Einschränkung. Weitere Informationen finden Sie unter ReferentialConstraint-Element.

Das PropertyRef-Element kann nur die folgenden untergeordneten Elemente aufweisen:

  • Dokumentation (kein (null) oder ein Element)
  • Anmerkungselemente

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

Das folgende Beispiel zeigt ein PropertyRef-Element , das zum Definieren eines Primärschlüssels verwendet wird, indem auf eine Eigenschaft verwiesen wird, die für ein EntityType-Element definiert ist.

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

ReferentialConstraint-Element (SSDL)

Das ReferentialConstraint-Element in der Speicherschemadefinitionssprache (SSDL) stellt eine Fremdschlüsseleinschränkung (auch als referenzielle Integritätseinschränkung bezeichnet) in der zugrunde liegenden Datenbank dar. Das Prinzipalende und das abhängige Ende der Einschränkung werden durch das Principal-Element bzw. das Dependent-Element angegeben. Auf Spalten, die am Prinzipalende und am abhängigen Enden beteiligt sind, wird mit PropertyRef-Elementen verwiesen.

Das Element ReferentialConstraint ist ein optionales untergeordnetes Element des Association-Elements. Wenn ein ReferentialConstraint-Element nicht zum Zuordnen der Fremdschlüsseleinschränkung verwendet wird, die im Association-Element angegeben ist, muss ein AssociationSetMapping-Element dazu verwendet werden.

Das Element "ReferentialConstraint " kann die folgenden untergeordneten Elemente aufweisen:

  • Dokumentation (kein (null) oder ein Element)
  • Principal (genau ein Element)
  • Dependent (genau ein Element)
  • Anmerkungselemente (kein (null) oder mehrere Elemente)

Anwendbare Attribute

Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das ReferentialConstraint-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Das folgende Beispiel zeigt ein Association-Element , das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders Fremdschlüsseleinschränkung teilnehmen:

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

ReturnType-Element (SSDL)

Das ReturnType-Element in der Speicherschemadefinitionssprache (SSDL) 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.

Der Rückgabetyp einer Funktion wird mit dem Type-Attribut oder dem ReturnType-Element angegeben.

Das ReturnType-Element kann die folgenden untergeordneten Elemente aufweisen:

  • CollectionType (eins)

Hinweis

Eine beliebige Anzahl von Anmerkungsattributen (benutzerdefinierte XML-Attribute) kann auf das ReturnType-Element angewendet werden. Benutzerdefinierte Attribute dürfen jedoch zu keinem XML-Namespace gehören, der für SSDL reserviert ist. Die vollqualifizierten Namen für zwei benutzerdefinierte Attribute dürfen nicht übereinstimmen.

Beispiel

Im folgenden Beispiel wird eine Funktion verwendet, die eine Auflistung von Zeilen zurückgibt.

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

RowType-Element (SSDL)

Ein RowType-Element in der Speicherschemadefinitionssprache (SSDL) definiert eine nicht benannte Struktur als Rückgabetyp für eine im Speicher definierte Funktion.

Ein RowType-Element ist das untergeordnete Element des CollectionType-Elements :

Ein RowType-Element kann die folgenden untergeordneten Elemente aufweisen:

  • Eigenschaft (ein oder mehrere Elemente)

Beispiel

Das folgende Beispiel zeigt eine Speicherfunktion, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung von Zeilen zurückgibt (wie im RowType-Element angegeben).

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Schema-Element (SSDL)

Das Schemaelement in der Speicherschemadefinitionssprache (SSDL) ist das Stammelement einer Speichermodelldefinition. Es enthält Definitionen für die Objekte, Funktionen und Container, die zusammen ein Speichermodell bilden.

Das Schemaelement kann null oder mehr der folgenden untergeordneten Elemente enthalten:

  • Zuordnung
  • EntityType
  • EntityContainer
  • Funktion

Das Schema-Element verwendet das Namespace-Attribut , um den Namespace für den Entitätstyp und zuordnungsobjekte in einem Speichermodell zu definieren. Innerhalb eines Namespace müssen alle Objekte eine eindeutige Bezeichnung aufweisen.

Ein Speichermodellnamespace unterscheidet sich vom XML-Namespace des Schemaelements . Ein Speichermodellnamespace (wie durch das Namespace-Attribut definiert) ist ein logischer Container für Entitätstypen 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/ssdl (wobei YYYY und MM ein Jahr und Monat darstellen) sind für SSDL reserviert. Benutzerdefinierte Elemente und Attribute können nicht in Namespaces mit diesem Format vorhanden sein.

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die auf das Schemaelement angewendet werden können.

Attributname Ist erforderlich Wert
Namespace Ja Der Namespace für das Speichermodell. Der Wert des Namespace-Attributs wird verwendet, um den vollqualifizierten Namen eines Typs zu bilden. Wenn sich beispielsweise ein EntityType mit dem Namen "Customer " im ExampleModel.Store-Namespace befindet, lautet der vollqualifizierte Name des EntityType-Elements "ExampleModel.Store.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 CSDL-Schemaelement übereinstimmen.
Alias Nein Ein anstelle der Namespacebezeichnung verwendeter Bezeichner. Wenn sich beispielsweise ein EntityType namens Customer im ExampleModel.Store-Namespace befindet und der Wert des Alias-Attributs StorageModel ist, können Sie StorageModel.Customer als vollqualifizierten Namen des EntityType verwenden.
Anbieter Ja Der Datenanbieter.
ProviderManifestToken Ja Ein Token, das dem Anbieter angibt, welches Anbietermanifest zurückgegeben werden soll. Für das Token ist kein Format definiert. Die für das Token möglichen Werte werden vom Anbieter definiert. Informationen zu SQL Server Anbietermanifesttoken finden Sie unter SqlClient für Entity Framework.

Beispiel

Das folgende Beispiel zeigt ein Schemaelement , das ein EntityContainer-Element , zwei EntityType-Elemente und ein Association-Element enthält.

 <Schema Namespace="ExampleModel.Store"
       Alias="Self" Provider="System.Data.SqlClient"
       ProviderManifestToken="2008"
       xmlns="https://schemas.microsoft.com/ado/2009/11/edm/ssdl">
   <EntityContainer Name="ExampleModelStoreContainer">
     <EntitySet Name="Customers"
                EntityType="ExampleModel.Store.Customers"
                Schema="dbo" />
     <EntitySet Name="Orders"
                EntityType="ExampleModel.Store.Orders"
                Schema="dbo" />
     <AssociationSet Name="FK_CustomerOrders"
                     Association="ExampleModel.Store.FK_CustomerOrders">
       <End Role="Customers" EntitySet="Customers" />
       <End Role="Orders" EntitySet="Orders" />
     </AssociationSet>
   </EntityContainer>
   <EntityType Name="Customers">
     <Documentation>
       <Summary>Summary here.</Summary>
       <LongDescription>Long description here.</LongDescription>
     </Documentation>
     <Key>
       <PropertyRef Name="CustomerId" />
     </Key>
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
   </EntityType>
   <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
     <Key>
       <PropertyRef Name="OrderId" />
     </Key>
     <Property Name="OrderId" Type="int" Nullable="false"
               c:CustomAttribute="someValue"/>
     <Property Name="ProductId" Type="int" Nullable="false" />
     <Property Name="Quantity" Type="int" Nullable="false" />
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <c:CustomElement>
       Custom data here.
     </c:CustomElement>
   </EntityType>
   <Association Name="FK_CustomerOrders">
     <End Role="Customers"
          Type="ExampleModel.Store.Customers" Multiplicity="1">
       <OnDelete Action="Cascade" />
     </End>
     <End Role="Orders"
          Type="ExampleModel.Store.Orders" Multiplicity="*" />
     <ReferentialConstraint>
       <Principal Role="Customers">
         <PropertyRef Name="CustomerId" />
       </Principal>
       <Dependent Role="Orders">
         <PropertyRef Name="CustomerId" />
       </Dependent>
     </ReferentialConstraint>
   </Association>
   <Function Name="UpdateOrderQuantity"
             Aggregate="false"
             BuiltIn="false"
             NiladicFunction="false"
             IsComposable="false"
             ParameterTypeSemantics="AllowImplicitConversion"
             Schema="dbo">
     <Parameter Name="orderId" Type="int" Mode="In" />
     <Parameter Name="newQuantity" Type="int" Mode="In" />
   </Function>
   <Function Name="UpdateProductInOrder" IsComposable="false">
     <CommandText>
       UPDATE Orders
       SET ProductId = @productId
       WHERE OrderId = @orderId;
     </CommandText>
     <Parameter Name="productId"
                Mode="In"
                Type="int"/>
     <Parameter Name="orderId"
                Mode="In"
                Type="int"/>
   </Function>
 </Schema>

Anmerkungsattribute

Anmerkungsattribute sind in der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) benutzerdefinierte XML-Attribute im Speichermodell, die zusätzliche Metadaten zu den Elementen im Speichermodell bereitstellen. Neben dem Vorhandensein einer gültigen XML-Struktur gelten für Anmerkungsattribute folgende Einschränkungen:

  • Anmerkungsattribute dürfen sich in keinem XML-Namespace befinden, der für SSDL reserviert ist.
  • Die vollqualifizierten Namen zweier Anmerkungsattribute dürfen nicht übereinstimmen.

Für ein angegebenes SSDL-Element kann mehr als ein Anmerkungsattribut übernommen werden. 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 Anmerkungsattribute, das auf die OrderId-Eigenschaft angewendet wird. Das Beispiel zeigt auch ein Anmerkungselement, das dem EntityType-Element hinzugefügt wurde.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Anmerkungelemente (SSDL)

Anmerkungselemente sind in der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) benutzerdefinierte XML-Elemente im Speichermodell, die zusätzliche Metadaten zum Speichermodell bereitstellen. Neben dem Vorhandensein einer gültigen XML-Struktur gelten für Anmerkungselemente folgende Einschränkungen:

  • Anmerkungselemente dürfen sich in keinem XML-Namespace befinden, der für SSDL reserviert ist.
  • Die vollqualifizierten Namen zweier Anmerkungselemente dürfen nicht übereinstimmen.
  • Anmerkungselemente müssen nach allen anderen untergeordneten Elementen eines angegebenen SSDL-Elements angeordnet werden.

Mehrere Anmerkungselemente können untergeordnete Elemente eines angegebenen SSDL-Elements sein. 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 auch ein Anmerkungsattribute, das auf die OrderId-Eigenschaft angewendet wird.

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

Facets (SSDL)

Facets stellen in der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) Einschränkungen für Spaltentypen dar, die in Eigenschaftenelementen angegeben werden. Facetten werden als XML-Attribute für Property-Elemente implementiert.

In der folgenden Tabelle werden die in SSDL unterstützten Facets beschrieben:

Facet BESCHREIBUNG
Sortierung Gibt die bei Vergleich- und Sortiervorgängen zu verwendende Sortierreihenfolge für die Werte der Eigenschaft an.
FixedLength Gibt an, ob sich die Länge des Spaltenwerts ändern kann.
MaxLength Gibt die maximale Länge des Spaltenwerts an.
Genauigkeit Gibt für Eigenschaften des Typs Decimal die Anzahl der Ziffern an, die ein Eigenschaftswert aufweisen kann. Gibt für Eigenschaften vom Typ "Time", "DateTime" und "DateTimeOffset" die Anzahl der Ziffern für den Bruchteil von Sekunden des Spaltenwerts an.
Skalieren Gibt die Anzahl der Dezimalstellen für den Spaltenwert an.
Unicode Gibt an, ob der Spaltenwert als Unicode gespeichert wird.