Freigeben über


SSDL-Spezifikation

Hinweis

SSDL v1 wird nicht unterstützt, aktualisieren Sie bitte auf V3.

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

In einer Entity Framework-Anwendung werden Speichermodellmetadaten aus einer SSDL-Datei (geschrieben in SSDL) in eine Instanz von „System.Data.Metadata.Edm.StoreItemCollection“ geladen und mithilfe der Methoden in der Klasse „System.Data.Metadata.Edm.MetadataWorkspace“ zugänglich gemacht. Entity Framework verwendet Metadaten des Speichermodells, um Abfragen für das konzeptionelle Modell in speicherspezifische Befehle zu übersetzen.

Der Entity Framework-Designer (EF Designer) speichert zur Entwurfszeit Informationen zum Speichermodell in einer EDMX-Datei. Zur Erstellungszeit verwendet der Entity Designer die in einer EDMX-Datei gespeicherten Informationen, um die SSDL-Datei zu erstellen, die zur Laufzeit vom Entity Framework benötigt wird.

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

SSDL-Version XML-Namespace
SSDL 1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL 2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL 3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Zuordnungselement (SSDL)

Das Association-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) gibt Tabellenspalten an, die in der zugrunde liegenden Datenbank an einer Fremdschlüsseleinschränkung beteiligt sind. 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 den Prinzipal und die abhängigen Enden der Zuordnung sowie die beteiligten Spalten an. Ist kein ReferentialConstraint-Element vorhanden, muss ein AssociationSetMapping-Element verwendet werden, um die Spaltenzuordnungen für die Zuordnung anzugeben.

Ein Association-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • End (genau zwei Elemente)
  • ReferentialConstraint (kein (null) oder ein Element)
  • Annotation (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

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Im folgenden Beispiel wird ein Association-Element gezeigt, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders-Fremdschlüsseleinschränkung beteiligt sind:

 <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 der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) stellt eine Fremdschlüsseleinschränkung zwischen zwei Tabellen in der zugrunde liegenden Datenbank dar. Die Tabellenspalten, die an der Fremdschlüsseleinschränkung beteiligt sind, werden in einem Association-Element angegeben. Das Association-Element, das einem bestimmten AssociationSet-Element entspricht, wird im Association-Attribut des AssociationSet-Elements angegeben.

SSDL-Zuordnungssätze werden CSDL-Zuordnungssätzen durch ein AssociationSetMapping-Element zugeordnet. Wenn jedoch die CSDL-Zuordnung für einen gegebenen CSDL-Zuordnungssatz mit einem ReferentialConstraint-Element definiert wird, ist kein entsprechendes AssociationSetMapping-Element notwendig. Wenn in diesem Fall ein AssociationSetMapping-Element vorhanden ist, werden die von diesem definierten Zuordnungen durch das ReferentialConstraint-Element überschrieben.

Ein AssociationSet-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • End (kein (null) oder zwei Elemente)
  • Annotation (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

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Im folgenden Beispiel wird ein AssociationSet-Element gezeigt, 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 Datenspeicherschema-Definitionssprache (SSDL) gibt an, dass der Rückgabetyp einer Funktion eine Auflistung ist. Das CollectionType-Element ist ein untergeordnetes Element des ReturnType-Elements. Der Auflistungstyp wird mithilfe des untergeordneten RowType-Elements angegeben:

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Das folgende Beispiel zeigt eine Funktion, die ein CollectionType-Element verwendet, um anzugeben, dass die Funktion eine Auflistung der 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 der Datenspeicher-Schemadefinitionssprache (SSDL) ist ein untergeordnetes Element des Function-Elements, das es Ihnen ermöglicht, eine SQL-Anweisung zu definieren, die in der Datenbank ausgeführt wird. Mit dem CommandText-Element können Sie eine Funktionalität hinzufügen, die einer gespeicherten Prozedur in der Datenbank ähnelt. Es besteht der Unterschied, dass Sie das CommandText-Element im Speichermodell definieren.

Das CommandText--Element darf keine untergeordneten Elemente aufweisen. Der Text des CommandText-Elements muss eine gültige SQL-Anweisung für die zugrunde liegende Datenbank enthalten.

Für das CommandText-Element gelten keine Attribute.

Beispiel

Das folgende Beispiel zeigt ein Function-Element mit einem untergeordneten CommandText--Element. Machen Sie die UpdateProductInOrder-Funktion als Methode für ObjectContext verfügbar, 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 DefiningQuery-Element von SSDL (Store Schema Definition Language, Datenspeicherschema-Definitionssprache) können Sie eine SQL-Anweisung direkt in der zugrunde liegenden Datenbank ausführen. Das DefiningQuery-Element wird häufig ähnlich wie eine Datenbanksicht verwendet, aber die Sicht wird im Speichermodell und nicht in der Datenbank definiert. Die in einem DefiningQuery-Element definierte Sicht kann im konzeptionellen Modell durch ein EntitySetMapping-Element einem Entitätstyp zugeordnet werden. Diese Zuordnungen sind schreibgeschützt.  

Die folgende SSDL-Syntax zeigt die Deklaration einer EntitySet-Instanz, gefolgt von einem DefiningQuery-Element, das eine Abfrage zum Abrufen der Sicht enthält.

 <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 in Entity Framework verwenden, um Lese-/Schreibszenarios für Sichten zu aktivieren. Als Basistabelle zum Abrufen von Daten und zum Verarbeiten von Änderungen durch gespeicherte Prozeduren kann entweder eine Datenquellensicht oder eine Entity SQL-Sicht verwendet werden.

Sie können Microsoft SQL Server Compact 3.5 mithilfe des DefiningQuery-Elements als Zielversion festlegen. Obwohl SQL Server Compact 3.5 keine gespeicherten Prozeduren unterstützt, können Sie mit dem DefiningQuery-Element eine ähnliche Funktionalität 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önnten ein DefiningQuery-Element hinzufügen, das bestimmte Parameter akzeptiert und dann eine gespeicherte Prozedur mit anderen Parametern aufruft, z. B. eine, die Daten löscht.

Abhängiges Element (SSDL)

Das Dependent-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) ist ein dem ReferentialConstraint-Element untergeordnetes Element und definiert das abhängige Ende einer Fremdschlüsseleinschränkung (auch referenzielle Einschränkung genannt). Das Dependent-Element gibt eine oder mehrere Spalten in einer Tabelle an, die auf eine oder mehrere Primärschlüsselspalten verweisen. PropertyRef-Elemente geben an, auf welche Spalten verwiesen wird. Das Principal-Element gibt die Primärschlüsselspalten an, auf die die Spalten verweisen, die im Dependent-Element angegeben wurden.

Ein Dependent-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • PropertyRef (ein oder mehrere Elemente)
  • Annotation (kein (null) oder mehrere Elemente)

Anwendbare Attribute

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

Attributname Ist erforderlich Wert
Rolle Ja Der gleiche Wert wie der des Role-Attributs (wenn verwendet) des entsprechenden End-Elements, andernfalls der Name der Tabelle, die die verweisende Spalte enthält.

Hinweis

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

Beispiel

Im folgenden Beispiel wird ein Association-Element gezeigt, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders-Fremdschlüsseleinschränkung beteiligt sind. Das Dependent -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 der Datenspeicherschema-Definitionssprache (SSDL) kann verwendet werden, um Informationen zu einem Objekt bereitzustellen, das in einem übergeordneten Element definiert ist.

Ein Documentation-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Summary: eine kurze Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)
  • LongDescription: Eine ausführliche Beschreibung des übergeordneten Elements. (kein (Null) oder ein Element)

Anwendbare Attribute

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

Beispiel

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

 <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 der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, 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 dem Type- bzw. dem Multiplicity-Attribut 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 (der vorliegenden Reihenfolge entsprechend):

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

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die für das End-Element übernommen werden können, wenn es sich dabei um das untergeordnete Element eines Association-Elements handelt.

Attributname Ist erforderlich Wert
Typ Ja Der 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 Dependent-Element des entsprechenden ReferentialConstraint-Elements (sofern verwendet).
Multiplizität Ja 1, 0..1 oder *, abhängig von der Anzahl der Zeilen, die sich am Ende der Fremdschlüsseleinschränkung befinden.
1 gibt an, dass genau eine Zeile am Ende der Fremdschlüsseleinschränkung vorhanden ist.
0..1 gibt an, dass keine oder eine Zeile am Ende der Fremdschlüsseleinschränkung vorhanden ist.
* gibt an, dass keine, eine oder mehrere Zeilen am Ende der Fremdschlüsseleinschränkung vorhanden sind.

Hinweis

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

Beispiel

Das folgende Beispiel zeigt ein Association-Element, das die FK_CustomerOrders-Fremdschlüsseleinschränkung definiert. Die Multiplicity-Werte, die für jedes End-Element angegeben sind, bedeuten, dass viele Zeilen in der Tabelle Orders einer Zeile in der Tabelle Customers zugeordnet werden können, aber nur eine Zeile in der Tabelle Customers kann einer Zeile in der Tabelle Orders 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 Customers verweisen, gelöscht werden, wenn die Zeile in der Tabelle Customers 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 (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • Annotation (kein (null) oder mehrere Elemente)

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die für das End-Element übernommen werden können, wenn es sich dabei um das untergeordnete Element eines 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 Role-Attribute, die für ein End-Element des entsprechenden Association-Elements angegeben wurden.

Hinweis

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

Beispiel

Das folgende Beispiel zeigt ein EntityContainer-Element mit einem AssociationSet-Element mit zwei End-Elementen:

 <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)

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

Ein EntityContainer-Element kann über kein (null) oder ein Documentation-Element verfügen. Ist ein Documentation-Element vorhanden, muss es allen anderen untergeordneten Elementen vorangestellt werden.

Ein EntityContainer-Element kann über kein (null) oder mehrere der folgenden untergeordneten Elemente verfügen (der vorliegenden Reihenfolge entsprechend):

  • EntitySet
  • AssociationSet
  • Anmerkungselemente

Anwendbare Attribute

In der nachfolgenden 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

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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ätenmengen 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)

Das EntitySet-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) stellt eine Tabelle oder Sicht der zugrunde liegenden Datenbank dar. Ein EntityType-Element in SSDL stellt eine Zeile in der Tabelle oder Sicht dar. Das EntityType-Attribut eines EntitySet-Elements gibt den speziellen SSDL-Entitätstyp an, der Zeilen in einer SSDL-Entitätenmenge darstellt. Die Zuordnung einer CSDL-Entitätenmenge zu einer SSDL-Entitätenmenge wird in einem EntitySetMapping-Element angegeben.

Das EntitySet-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Documentation (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 (nicht hier 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.
Table Nein Die Datenbanktabelle.

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Das folgende Beispiel zeigt ein EntityContainer-Element mit zwei EntitySet-Elementen und einem AssociationSet-Element:

 <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)

Das EntityType-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) stellt eine Zeile in einer Tabelle oder Sicht der zugrunde liegenden Datenbank dar. Ein EntitySet-Element in SSDL stellt die Tabelle oder Sicht dar, in der Zeilen enthalten sind. Das EntityType-Attribut eines EntitySet-Elements gibt den speziellen SSDL-Entitätstyp an, der Zeilen in einer SSDL-Entitätenmenge 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 (der vorliegenden Reihenfolge entsprechend):

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

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die für das EntityType-Element übernommen werden können.

Attributname Ist erforderlich Wert
Name Ja Der Name des Entitätstyps. 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

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Das folgende Beispiel zeigt ein EntityType-Element mit zwei Eigenschaften:

 <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 der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) gibt eine in der zugrunde liegenden Datenbank vorhandene gespeicherte Prozedur an.

Das Function-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • Parameter (kein (null) oder mehrere Elemente)
  • CommandText (kein (null) oder ein Element)
  • ReturnType (kein (null) oder mehrere Elemente)
  • Annotation (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 mit beiden.

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 dazu verwendet werden, 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 (nicht hier 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.
Aggregieren 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 niladische2 Funktion ist, andernfalls False
IsComposable Nein True, wenn die Funktion eine zusammensetzbare3 Funktion ist, andernfalls False
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 den Funktionen, die im Speichermodell definiert sind, finden Sie unter „CommandText-Element (SSDL)“.

2 Eine niladische Funktion ist eine Funktion, die keine Parameter akzeptiert und ohne Klammern aufgerufen werden kann.

3 Zwei Funktionen sind zusammensetzbar, wenn der Rückgabewert einer Funktion als Eingabewert für die andere Funktion verwendet werden kann.

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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 Prozedur UpdateOrderQuantity 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 der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) stellt den Primärschlüssel einer Tabelle in der zugrunde liegenden Datenbank dar. Das Key-Element ist ein untergeordnetes Element eines EntityType-Elements, das eine Zeile in einer Tabelle darstellt. Der Primärschlüssel wird im Key-Element definiert, indem auf ein oder mehrere Property-Elemente verwiesen wird, die für das EntityType-Element definiert wurden.

Das Key-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • PropertyRef (ein oder mehrere Elemente)
  • Anmerkungselemente

Auf das Key-Element sind keine Attribute anwendbar.

Beispiel

Im folgenden Beispiel wird ein EntityType-Element mit einem Schlüssel gezeigt, 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)

In der Datenspeicherschema-Definitionssprache spiegelt das OnDelete-Element das Datenbankverhalten wider, wenn eine Zeile, die Teil einer Fremdschlüsseleinschränkung ist, gelöscht wird. Wenn die Aktion auf Cascade festgelegt ist, werden Zeilen, die auf eine Zeile verweisen, die gelöscht wird, ebenfalls gelöscht. Wenn die Aktion auf None festgelegt ist, werden Zeilen, die auf eine Zeile verweisen, die gelöscht wird, nicht ebenfalls gelöscht. Ein OnDelete-Element ist ein untergeordnetes Element eines End-Elements.

Ein OnDelete-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • Annotation (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 Cascade oder None (Der Wert Restricted ist gültig, hat jedoch die gleiche Wirkung wie None.)

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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 Association-Element, das die FK_CustomerOrders-Fremdschlüsseleinschränkung definiert. Das OnDelete-Element gibt an, dass alle Zeilen in der Tabelle Orders, die auf eine bestimmte Zeile in der Tabelle Customers verweisen, gelöscht werden, wenn die Zeile in der Tabelle Customers 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 Parameter-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, 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 (der vorliegenden Reihenfolge entsprechend):

  • Documentation (kein (null) oder ein Element)
  • Annotation (kein (null) oder mehrere Elemente)

Anwendbare Attribute

In der nachfolgenden 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 Die Verwendung von In, Out oder InOut ist 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.
Skalierung Nein Der Maßstab des Parameters.
SRID Nein Referenzbezeichner des räumlichen Systems. Gilt nur für Parameter räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server).

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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 Parameter-Elementen, 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 Principal-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) ist ein dem ReferentialConstraint-Element untergeordnetes Element und definiert das Prinzipalende einer Fremdschlüsseleinschränkung (auch referenzielle Einschränkung genannt). Das Principal-Element gibt eine oder mehrere Primärschlüsselspalten in einer Tabelle an, auf die durch eine andere Spalte oder andere Spalten verwiesen wird. PropertyRef-Elemente geben an, auf welche Spalten verwiesen wird. Das Dependent-Element gibt die Spalten an, die auf die Primärschlüsselspalten verweisen, die im Principal-Element angegeben werden.

Das Principal-Element kann die folgenden untergeordneten Elemente aufweisen (der vorliegenden Reihenfolge entsprechend):

  • PropertyRef (ein oder mehrere Elemente)
  • Annotation (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 der des Role-Attributs (wenn verwendet) des entsprechenden End-Elements, andernfalls der Name der Tabelle, die die Spalte enthält, auf die verwiesen wird.

Hinweis

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

Beispiel

Im folgenden Beispiel wird ein Association-Element gezeigt, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders-Fremdschlüsseleinschränkung beteiligt sind. Das Principal-Element gibt die Spalte CustomerId der Tabelle Customer als Prinzipalende 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 Property-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) stellt eine Spalte in einer Tabelle in der zugrunde liegenden Datenbank dar. Property-Elemente sind untergeordnete Elemente von EntityType-Elementen, die Zeilen einer Tabelle darstellen. Jedes Property-Element, das für ein EntityType-Element definiert ist, stellt eine Spalte dar.

Das Property-Element darf 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.
NULL zulassen Nein True (Standardwert) oder False, je nachdem, ob der Eigenschaft ein NULL-Wert zugewiesen werden kann
DefaultValue Nein Der Standardwert der zugehörigen Spalte.
MaxLength Nein Maximale Länge der zugehörigen Spalte.
FixedLength Nein True oder False, je nachdem, ob der Wert der zugehörigen Spalte als Zeichenfolge mit fester Länge gespeichert wird
Genauigkeit Nein Die Genauigkeit der zugehörigen Spalte.
Skalierung Nein Die Dezimalstellenanzahl der zugehörigen Spalte.
Unicode Nein True oder False, je nachdem, ob der Wert der zugehörigen Spalte als Unicode-Zeichenfolge gespeichert wird
Sortierung Nein Eine Zeichenfolge, die angibt, welche Sortierreihenfolge in der Datenquelle verwendet wird.
SRID Nein Referenzbezeichner des räumlichen Systems. Gilt nur für Eigenschaften räumlicher Typen. Weitere Informationen finden Sie unter SRID und SRID (SQL Server).
StoreGeneratedPattern Nein None, Identity (wenn der Wert der zugehörigen Spalte eine Identität ist, die in der Datenbank generiert wird) oder Computed (wenn der Wert der zugehörigen Spalte in der Datenbank generiert wird). Ist für RowType-Eigenschaften nicht zulässig.

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Das folgende Beispiel zeigt ein EntityType-Element mit zwei untergeordneten Property-Elementen:

 <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 der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) verweist auf eine Eigenschaft eines EntityType-Elements, um anzugeben, dass die Eigenschaft eine der folgenden Rollen ausübt:

  • Sie ist Teil des Primärschlüssels der Tabelle, die 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 darf nur folgende untergeordnete Elemente aufweisen:

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

Anwendbare Attribute

In der folgenden Tabelle werden die Attribute beschrieben, die für das PropertyRef-Element übernommen werden können.

Attributname Ist erforderlich Wert
Name Ja Der Name der referenzierten Eigenschaft.

Hinweis

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

Beispiel

Im folgenden Beispiel wird ein PropertyRef-Element gezeigt, das verwendet wird, um einen Primärschlüssel zu definieren, 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)

In der Datenspeicherschema-Definitionssprache stellt das ReferentialConstraint-Element eine Fremdschlüsseleinschränkung (auch Einschränkung der referentiellen Integrität genannt) 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 ReferentialConstraint-Element ist ein optionales untergeordnetes Element des Association-Elements. Wenn kein ReferentialConstraint-Element verwendet wird, um die Fremdschlüsseleinschränkung zuzuordnen, die im Association-Element angegeben ist, muss hierfür ein AssociationSetMapping-Element verwendet werden.

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

  • Documentation (kein (null) oder ein Element)
  • Principal (genau ein Element)
  • Dependent (genau ein Element)
  • Annotation (kein (null) oder mehrere Elemente)

Anwendbare Attribute

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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

Im folgenden Beispiel wird ein Association-Element gezeigt, das ein ReferentialConstraint-Element verwendet, um die Spalten anzugeben, die an der FK_CustomerOrders-Fremdschlüsseleinschränkung beteiligt sind:

 <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 Datenspeicherschema-Definitionssprache (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 (ein Element)

Hinweis

Es können beliebig viele Anmerkungsattribute (benutzerdefinierte XML-Attribute) 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 der 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 Datenspeicherschema-Definitionssprache (SSDL) definiert eine unbenannte Struktur als Rückgabetyp für eine im Speicher definierte Funktion.

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

Ein RowType-Element kann die folgenden untergeordneten Elemente aufweisen:

  • Property (ein oder mehrere Elemente)

Beispiel

Das folgende Beispiel zeigt eine Speicherfunktion, die mithilfe eines CollectionType--Elements angibt, dass die Funktion eine Auflistung der 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 Schema-Element der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) ist das Stammelement einer Speichermodelldefinition. Es enthält Definitionen für die Objekte, Funktionen und Container, die zusammen ein Speichermodell bilden.

Das Schema-Element kann keine (null) oder mehrere der folgenden untergeordneten Elemente enthalten:

  • Zuordnung
  • EntityType
  • EntityContainer
  • Funktion

Das Schema-Element definiert mithilfe des Namespace-Attributs den Namespace für den Entitätstyp, den komplexen Typ und die Zuordnungsobjekte in einem Speichermodell. Innerhalb eines Namespace müssen alle Objekte eine eindeutige Bezeichnung aufweisen.

Ein Namespace für ein Speichermodell unterscheidet sich vom XML-Namespace des Schema-Elements. Ein Namespace für ein Speichermodell (wie vom Namespace-Attribut definiert) ist ein logischer Container für Entitätstypen, komplexe Typen und Zuordnungstypen. Der XML-Namespace (vom xmlns-Attribut angegeben) eines Schema-Elements ist der Standardnamespace für untergeordnete Elemente und Attribute des Schema-Elements. XML-Namespaces im Format https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (wobei JJJJ und MM für ein Jahr bzw. einen Monat stehen) 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 für das Schema-Element übernommen 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. Befindet sich beispielsweise ein EntityType-Element mit dem Namen Customer im Namespace „ExampleModel.Store“, 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 darf nicht mit dem Wert für das Namespace-Attribut im CSDL-Element „Schema“ identisch sein.
Alias Nein Ein anstelle der Namespacebezeichnung verwendeter Bezeichner. Wenn sich beispielsweise ein EntityType-Element mit dem Namen Customer im Namespace „ExampleModel.Store“ befindet und der Wert des Alias-Attributs StorageModel ist, können Sie „StorageModel.Customer“ als vollqualifizierten Namen für 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 Schema-Element, 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. Auf Metadaten in Anmerkungselementen kann zur Laufzeit mithilfe von Klassen im Namespace „System.Data.Metadata.Edm“ zugegriffen werden.

Beispiel

Das folgende Beispiel zeigt ein EntityType-Element mit einem Anmerkungsattribut, das auf die OrderId-Eigenschaft angewendet wird. Im Beispiel wird auch ein dem EntityType-Element hinzugefügtes Anmerkungselement gezeigt.

 <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. Seit Version 4 von .NET Framework kann auf in Anmerkungselementen enthaltene Metadaten zur Laufzeit mithilfe von Klassen im Namespace „System.Data.Metadata.Edm“ zugegriffen werden.

Beispiel

Im folgenden Beispiel wird ein EntityType-Element gezeigt, das über ein Anmerkungselement (CustomElement) verfügt. Das Beispiel zeigt auch ein Anmerkungsattribut, das auf die OrderId-Eigenschaft angewendet 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>

Facets (SSDL)

Facets stellen in der Datenspeicherschema-Definitionssprache (Store Schema Definition Language, SSDL) Einschränkungen für Spaltentypen dar, die in Eigenschaftenelementen angegeben werden. Facets 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 Bei Eigenschaften des Typs Decimal wird die Anzahl der Ziffern angegeben, die ein Eigenschaftswert aufweisen darf. Bei Eigenschaften der Typen Time, DateTime und DateTimeOffset wird die Anzahl der Dezimalstellen für die Sekunden des Spaltenwerts angegeben.
Skalierung Gibt die Anzahl der Dezimalstellen für den Spaltenwert an.
Unicode Gibt an, ob der Spaltenwert als Unicode gespeichert wird.