Specifica SSDL

Store Schema Definition Language (SSDL) è un linguaggio basato su XML che descrive il modello di archiviazione di un'applicazione Entity Framework.

In un'applicazione Entity Framework i metadati del modello di archiviazione vengono caricati da un file ssdl (scritto in SSDL) in un'istanza di System.Data.Metadata.Edm.StoreItemCollection ed è accessibile usando i metodi nella classe System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa i metadati del modello di archiviazione per convertire le query sul modello concettuale in comandi specifici dell'archivio.

Entity Framework Designer (EF Designer) archivia le informazioni sul modello di archiviazione in un file con estensione edmx in fase di progettazione. In fase di compilazione Entity Designer usa le informazioni in un file con estensione edmx per creare il file ssdl necessario per Entity Framework in fase di esecuzione.

Le versioni di SSDL si differenziano tra loro per gli spazi dei nomi XML.

Versione SSDL Spazio dei nomi XML
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

Elemento Association (SSDL)

Un elemento Association nell'archivio SCHEMA Definition Language (SSDL) specifica le colonne di tabella che partecipano a un vincolo di chiave esterna nel database sottostante. Due elementi End figlio obbligatori specificano le tabelle che costituiscono le entità finali dell'associazione e la molteplicità di ciascuna entità finale. Un elemento ReferentialConstraint facoltativo specifica le entità finali principale e dipendente dell'associazione, nonché le colonne coinvolte. Se non è presente alcun elemento ReferialConstraint , è necessario utilizzare un elemento AssociationSetMapping per specificare i mapping di colonna per l'associazione.

L'elemento Association può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • End (esattamente due elementi)
  • ReferentialConstraint (zero o un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento Association .

Nome attributo Obbligatorio Valore
Nome Il nome del vincolo di chiave esterna corrispondente nel database sottostante.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Association . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che usa un elemento ReferialConstraint per specificare le colonne che partecipano al vincolo di chiave esterna FK_CustomerOrders :

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

Elemento AssociationSet (SSDL)

L'elemento AssociationSet nell'archivio schema definition language (SSDL) rappresenta un vincolo di chiave esterna tra due tabelle nel database sottostante. Le colonne della tabella che fanno parte del vincolo di chiave esterna vengono specificate in un elemento Association. L'elemento Association che corrisponde a un determinato elemento AssociationSet viene specificato nell'attributo Association dell'elemento AssociationSet.

Il mapping dei set di associazioni SSDL viene eseguito in set di associazioni CSDL da un elemento AssociationSetMapping. Tuttavia, se l'associazione CSDL per un determinato set di associazioni CSDL viene definita tramite un elemento ReferialConstraint , non è necessario alcun elemento AssociationSetMapping corrispondente. In questo caso, se è presente un elemento AssociationSetMapping , i mapping definiti verranno sostituiti dall'elemento ReferialConstraint .

L'elemento AssociationSet può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • End (zero o due elementi)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che è possibile applicare all'elemento AssociationSet .

Nome attributo Obbligatorio Valore
Nome Nome del vincolo di chiave esterna rappresentato dal set di associazioni.
Association Rules Nome dell'associazione che definisce le colonne che fanno parte del vincolo di chiave esterna.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento AssociationSet . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento AssociationSet che rappresenta il FK_CustomerOrders vincolo di chiave esterna nel database sottostante:

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

Elemento CollectionType (SSDL)

L'elemento CollectionType nell'archivio schema definition language (SSDL) specifica che il tipo restituito di una funzione è una raccolta. L'elemento CollectionType è un elemento figlio dell'elemento ReturnType. Il tipo di raccolta viene specificato utilizzando l'elemento figlio RowType:

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento CollectionType . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrata una funzione che usa un elemento CollectionType per specificare che la funzione restituisce una raccolta di righe.

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

Elemento CommandText (SSDL)

L'elemento CommandText nell'archivio schema definition language (SSDL) è un elemento figlio dell'elemento Function che consente di definire un'istruzione SQL eseguita nel database. L'elemento CommandText consente di aggiungere funzionalità simili a una stored procedure nel database, ma si definisce l'elemento CommandText nel modello di archiviazione.

L'elemento CommandText non può contenere elementi figlio. Il corpo dell'elemento CommandText deve essere un'istruzione SQL valida per il database sottostante.

Nessun attributo è applicabile all'elemento CommandText .

Esempio

Nell'esempio seguente viene illustrato un elemento Function con un elemento CommandText figlio. Esporre la funzione UpdateProductInOrder come metodo in ObjectContext importandola nel modello concettuale.  

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

Elemento DefiningQuery (SSDL)

L'elemento DefiningQuery nell'archivio di SSDL (Schema Definition Language) consente di eseguire un'istruzione SQL direttamente nel database sottostante. L'elemento DefiningQuery viene comunemente usato come una vista di database, ma la vista è definita nel modello di archiviazione anziché nel database. La vista definita in un elemento DefiningQuery può essere mappata a un tipo di entità nel modello concettuale tramite un elemento EntitySetMapping. Questi mapping sono di sola lettura.  

La sintassi SSDL seguente mostra la dichiarazione di un EntitySet seguito dall'elemento DefiningQuery che contiene una query usata per recuperare la vista.

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

È possibile usare stored procedure in Entity Framework per abilitare scenari di lettura/scrittura sulle viste. È possibile usare una vista origine dati o una vista Entity SQL come tabella di base per il recupero dei dati e per l'elaborazione delle modifiche da parte di stored procedure.

È possibile usare l'elemento DefiningQuery per specificare come destinazione Microsoft SQL Server Compact 3.5. Anche se SQL Server Compact 3.5 non supporta le stored procedure, è possibile implementare funzionalità simili con l'elemento DefiningQuery. Un'altra situazione in cui può essere utile è nella creazione di stored procedure per risolvere una mancata corrispondenza tra i tipi di dati utilizzati nel linguaggio di programmazione e quelli dell'origine dati. È possibile scrivere un oggetto DefiningQuery che accetta un determinato set di parametri e quindi chiama una stored procedure con un set diverso di parametri, ad esempio una stored procedure che elimina i dati.

Elemento Dependent (SSDL)

L'elemento Dependent nell'archivio schema definition language (SSDL) è un elemento figlio dell'elemento ReferialConstraint che definisce la fine dipendente di un vincolo di chiave esterna (detto anche vincolo referenziale). L'elemento Dipendente specifica la colonna (o le colonne) in una tabella che fa riferimento a una colonna chiave primaria (o colonne). Gli elementi PropertyRef specificano le colonne a cui si fa riferimento. L'elemento Principal specifica le colonne chiave primaria a cui fanno riferimento le colonne specificate nell'elemento Dipendente .

L'elemento Dipendente può avere gli elementi figlio seguenti (nell'ordine elencato):

  • PropertyRef (uno o più elementi)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento Dipendente .

Nome attributo Obbligatorio Valore
Ruolo Lo stesso valore dell'attributo Role (se usato) dell'elemento End corrispondente; in caso contrario, il nome della tabella contenente la colonna di riferimento.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Dipendente . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che usa un elemento ReferialConstraint per specificare le colonne che partecipano al vincolo FK_CustomerOrders chiave esterna. L'elemento Dependent specifica la colonna CustomerId della tabella Order come fine dipendente del vincolo.

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

Elemento Documentation (SSDL)

L'elemento Documentation nell'archivio del linguaggio di definizione dello schema (SSDL) può essere usato per fornire informazioni su un oggetto definito in un elemento padre.

L'elemento Documentation può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Riepilogo: breve descrizione dell'elemento padre. Zero o un elemento.
  • LongDescription: una descrizione completa dell'elemento padre. Zero o un elemento.

Attributi applicabili

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Documentation . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato l'elemento Documentation come elemento figlio di un elemento EntityType.

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

Elemento End (SSDL)

L'elemento End nell'archivio del linguaggio di definizione dello schema (SSDL) specifica la tabella e il numero di righe a una fine di un vincolo di chiave esterna nel database sottostante. L'elemento End può essere figlio dell'elemento Association o dell'elemento AssociationSet. In entrambi i casi, gli elementi figlio possibili e gli attributi applicabili sono diversi.

Elemento End come figlio dell'elemento Association

Un elemento End (come figlio dell'elemento Association ) specifica rispettivamente la tabella e il numero di righe alla fine di un vincolo di chiave esterna con gli attributi Type e Multiplicity . Le entità finali del vincolo di chiave esterna sono definite come parte dell'associazione SSDL. L'associazione SSDL deve disporre esattamente di due entità finali.

Un elemento End può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • OnDelete (zero o un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento End quando è figlio di un elemento Association .

Nome attributo Obbligatorio Valore
Tipo Il nome completo del set di entità SSDL che si trova in corrispondenza dell'entità finale del vincolo di chiave esterna.
Ruolo No Valore dell'attributo Role nell'elemento Principal o Dependent dell'elemento ReferialConstraint corrispondente (se usato).
Molteplicità 1, 0..1 o * a seconda del numero di righe che possono essere alla fine del vincolo di chiave esterna.
1 indica che esiste esattamente una riga alla fine del vincolo di chiave esterna.
0..1 indica che zero o una riga esiste alla fine del vincolo di chiave esterna.
* indica che zero, uno o più righe esistono alla fine del vincolo di chiave esterna.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento End . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che definisce il vincolo FK_CustomerOrders chiave esterna. I valori Multiplicity specificati in ogni elemento End indicano che molte righe della tabella Orders possono essere associate a una riga nella tabella Customers, ma è possibile associare una sola riga nella tabella Customers a una riga nella tabella Orders. Inoltre, l'elemento OnDelete indica che tutte le righe della tabella Orders che fanno riferimento a una determinata riga nella tabella Customers verranno eliminate se la riga nella tabella Customers viene eliminata.

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

Elemento End come figlio dell'elemento AssociationSet

L'elemento End (come figlio dell'elemento AssociationSet ) specifica una tabella a una fine di un vincolo di chiave esterna nel database sottostante.

Un elemento End può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento End quando è figlio di un elemento AssociationSet .

Nome attributo Obbligatorio Valore
EntitySet Il nome del set di entità SSDL in corrispondenza dell'entità finale del vincolo di chiave esterna.
Ruolo No Valore di uno degli attributi Role specificati in un elemento End dell'elemento Association corrispondente.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento End . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento EntityContainer con un elemento AssociationSet con due elementi End :

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

Elemento EntityContainer (SSDL)

Un elemento EntityContainer nell'archivio del linguaggio di definizione dello schema (SSDL) descrive la struttura dell'origine dati sottostante in un'applicazione Entity Framework: i set di entità SSDL (definiti negli elementi EntitySet) rappresentano tabelle in un database, i tipi di entità SSDL (definiti negli elementi EntityType) rappresentano righe in una tabella e i set di associazione (definiti negli elementi AssociationSet) rappresentano vincoli di chiave esterna in un database. Un contenitore di entità del modello di archiviazione esegue il mapping a un contenitore di entità del modello concettuale attraverso l'elemento EntityContainerMapping.

Un elemento EntityContainer può avere zero o uno elementi Documentazione. Se è presente un elemento Documentation , deve precedere tutti gli altri elementi figlio.

Un elemento EntityContainer può avere zero o più degli elementi figlio seguenti (nell'ordine elencato):

  • EntitySet
  • AssociationSet
  • Elementi Annotation

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento EntityContainer .

Nome attributo Obbligatorio Valore
Nome Nome del contenitore di entità. Il nome non può contenere caratteri punto (.).

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento EntityContainer . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

L'esempio seguente mostra un elemento EntityContainer che definisce due set di entità e un set di associazioni. I nomi dei tipi di entità e associazione sono qualificati dal nome dello spazio dei nomi del modello concettuale.

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

Elemento EntitySet (SSDL)

Un elemento EntitySet nell'archivio schema definition language (SSDL) rappresenta una tabella o una vista nel database sottostante. Un elemento EntityType in SSDL rappresenta una riga nella tabella o nella visualizzazione. L'attributo EntityType di un elemento EntitySet specifica il tipo di entità SSDL specifico che rappresenta le righe in un set di entità SSDL. Il mapping tra un set di entità CSDL e un set di entità SSDL viene specificato in un elemento EntitySetMapping.

L'elemento EntitySet può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • DefiningQuery (zero o un elemento)
  • Elementi Annotation

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che è possibile applicare all'elemento EntitySet .

Nota

Alcuni attributi (non elencati qui) possono essere qualificati con l'alias dell'archivio . Questi attributi vengono utilizzati dalla procedura guidata Aggiorna modello in caso di aggiornamento di un modello.

Nome attributo Obbligatorio Valore
Nome Nome del set di entità.
EntityType Nome completo del tipo di entità per il quale il set di entità contiene delle istanze.
Schema No Schema del database.
Tabella No Tabella del database.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento EntitySet . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

L'esempio seguente mostra un elemento EntityContainer con due elementi EntitySet e un elemento AssociationSet :

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

Elemento EntityType (SSDL)

Un elemento EntityType nell'archivio SCHEMA Definition Language (SSDL) rappresenta una riga in una tabella o vista del database sottostante. Un elemento EntitySet in SSDL rappresenta la tabella o la vista in cui si trova la riga. L'attributo EntityType di un elemento EntitySet specifica il tipo di entità SSDL specifico che rappresenta le righe in un set di entità SSDL. Il mapping tra un tipo di entità SSDL e un tipo di entità CSDL viene specificato in un elemento EntityTypeMapping.

L'elemento EntityType può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • Key (zero o un elemento)
  • Elementi Annotation

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento EntityType .

Nome attributo Obbligatorio Valore
Nome Nome del tipo di entità. Questo valore corrisponde generalmente al nome della tabella in cui il tipo di entità rappresenta una riga. Questo valore non può contenere punti (.).

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento EntityType . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

L'esempio seguente mostra un elemento EntityType con due proprietà:

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

Elemento Function (SSDL)

L'elemento Function in store schema definition language (SSDL) specifica una stored procedure presente nel database sottostante.

L'elemento Function può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • Parametro (zero o più)
  • CommandText (zero o uno)
  • ReturnType (zero o più)
  • Elementi Annotation (zero o più elementi)

È necessario specificare un tipo restituito per una funzione con l'elemento ReturnType o l'attributo ReturnType (vedere di seguito), ma non entrambi.

È possibile importare stored procedure specificate nel modello di archiviazione nel modello concettuale di un'applicazione. Per altre informazioni, vedere Esecuzione di query con stored procedure. L'elemento Function può essere usato anche per definire funzioni personalizzate nel modello di archiviazione.  

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento Function .

Nota

Alcuni attributi (non elencati qui) possono essere qualificati con l'alias dell'archivio . Questi attributi vengono utilizzati dalla procedura guidata Aggiorna modello in caso di aggiornamento di un modello.

Nome attributo Obbligatorio Valore
Nome Nome della stored procedure.
Returntype No Tipo restituito della stored procedure.
Aggregata No True se la stored procedure restituisce un valore aggregato; in caso contrario False.
Incorporato No True se la funzione è una funzionepredefinita 1 ; in caso contrario False.
StoreFunctionName No Nome della stored procedure.
NiladicFunction No True se la funzione è una funzione niladica2 ; False in caso contrario.
IsComposable No True se la funzione è una funzionecomponibile 3 ; False in caso contrario.
ParameterTypeSemantics No Enumerazione che definisce la semantica dei tipi utilizzata per risolvere gli overload della funzione. L'enumerazione è definita nel file manifesto del provider per ogni definizione di funzione. Il valore predefinito è AllowImplicitConversion.
Schema No Nome dello schema in cui viene definita la stored procedure.

1 Una funzione predefinita è una funzione definita nel database. Per informazioni sulle funzioni definite nel modello di archiviazione, vedere Elemento CommandText (SSDL).

2 Una funzione niladica è una funzione che non accetta parametri e, quando viene chiamato, non richiede parentesi.

3 Due funzioni sono componibili se l'output di una funzione può essere l'input per l'altra funzione.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Function . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Function che corrisponde alla stored procedure UpdateOrderQuantity . La stored procedure accetta due parametri e non restituisce alcun valore.

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

Elemento Key (SSDL)

L'elemento Key in store schema definition language (SSDL) rappresenta la chiave primaria di una tabella nel database sottostante. Key è un elemento figlio di un elemento EntityType, che rappresenta una riga in una tabella. La chiave primaria viene definita nell'elemento Key facendo riferimento a uno o più elementi Property definiti nell'elemento EntityType .

L'elemento Key può avere gli elementi figlio seguenti (nell'ordine elencato):

  • PropertyRef (uno o più elementi)
  • Elementi Annotation

Nessun attributo è applicabile all'elemento Key .

Esempio

L'esempio seguente mostra un elemento EntityType con una chiave che fa riferimento a una proprietà:

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

Elemento OnDelete (SSDL)

L'elemento OnDelete nell'archivio schema definition language (SSDL) riflette il comportamento del database quando viene eliminata una riga che partecipa a un vincolo di chiave esterna. Se l'azione è impostata su Cascade, verranno eliminate anche le righe che fanno riferimento a una riga che viene eliminata. Se l'azione è impostata su Nessuno, le righe che fanno riferimento a una riga da eliminare non vengono eliminate. Un elemento OnDelete è un elemento figlio di un elemento End.

Un elemento OnDelete può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento OnDelete .

Nome attributo Obbligatorio Valore
Azione Cascata o Nessuno. Il valore Restricted è valido ma ha lo stesso comportamento di Nessuno.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento OnDelete . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che definisce il vincolo di chiave esterna FK_CustomerOrders . L'elemento OnDelete indica che tutte le righe della tabella Orders che fanno riferimento a una determinata riga nella tabella Customers verranno eliminate se la riga nella tabella Customers viene eliminata.

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

Elemento Parameter (SSDL)

L'elemento Parameter nell'archivio schema definition language (SSDL) è un elemento figlio dell'elemento Function che specifica i parametri per una stored procedure nel database.

L'elemento Parameter può avere gli elementi figlio seguenti (nell'ordine elencato):

  • Documentation (zero o un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento Parameter .

Nome attributo Obbligatorio Valore
Nome Nome del parametro.
Tipo Tipo di parametro.
Modalità No In, Out o InOut a seconda che il parametro sia un parametro di input, output o input/output.
MaxLength No Lunghezza massima del parametro.
Precisione No Precisione del parametro
Scalabilità No Scalabilità del parametro
SRID No Identificatore di riferimento del sistema spaziale. Valido solo per i parametri dei tipi spaziali. Per altre informazioni, vedere SRID e SRID (SQL Server).

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Parameter . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Function con due elementi Parameter che specificano parametri di input:

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

Elemento Principal (SSDL)

L'elemento Principal nell'archivio del linguaggio di definizione dello schema (SSDL) è un elemento figlio dell'elemento ReferialConstraint che definisce la fine principale di un vincolo di chiave esterna (denominato anche vincolo referenziale). L'elemento Principal specifica la colonna chiave primaria (o colonne) in una tabella a cui fa riferimento un'altra colonna (o colonne). Gli elementi PropertyRef specificano le colonne a cui si fa riferimento. L'elemento Dipendente specifica colonne che fanno riferimento alle colonne chiave primaria specificate nell'elemento Principal .

L'elemento Principal può avere gli elementi figlio seguenti (nell'ordine elencato):

  • PropertyRef (uno o più elementi)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento Principal .

Nome attributo Obbligatorio Valore
Ruolo Lo stesso valore dell'attributo Role (se usato) dell'elemento End corrispondente; in caso contrario, il nome della tabella contenente la colonna a cui si fa riferimento.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Principal . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che usa un elemento ReferialConstraint per specificare le colonne che partecipano al vincolo FK_CustomerOrders chiave esterna. L'elemento Principal specifica la colonna CustomerId della tabella Customer come fine principale del vincolo.

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

Elemento Property (SSDL)

L'elemento Property nell'archivio del linguaggio di definizione dello schema (SSDL) rappresenta una colonna in una tabella nel database sottostante. Gli elementi delle proprietà sono figlio di elementi EntityType, che rappresentano righe in una tabella. Ogni elemento Property definito in un elemento EntityType rappresenta una colonna.

Un elemento Property non può avere elementi figlio.

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento Property .

Nome attributo Obbligatorio Valore
Nome Nome della colonna corrispondente.
Tipo Tipo della colonna corrispondente.
Ammette i valori Null No True (valore predefinito) o False a seconda che la colonna corrispondente possa avere un valore Null.
DefaultValue No Valore predefinito della colonna corrispondente.
MaxLength No Lunghezza massima della colonna corrispondente.
FixedLength No True o False a seconda che il valore di colonna corrispondente venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione della colonna corrispondente.
Scalabilità No Scala della colonna corrispondente.
Unicode No True o False a seconda che il valore di colonna corrispondente venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.
SRID No Identificatore di riferimento del sistema spaziale. Valido solo per le proprietà dei tipi spaziali. Per altre informazioni, vedere SRID e SRID (SQL Server).
StoreGeneratedPattern No Nessuna, Identity (se il valore di colonna corrispondente è un'identità generata nel database) o Calcolata (se il valore di colonna corrispondente viene calcolato nel database). Non valido per le proprietà RowType.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento Property . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento EntityType con due elementi proprietà figlio:

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

Elemento PropertyRef (SSDL)

L'elemento PropertyRef nell'archivio del linguaggio di definizione dello schema (SSDL) fa riferimento a una proprietà definita in un elemento EntityType per indicare che la proprietà eseguirà uno dei ruoli seguenti:

  • Fare parte della chiave primaria della tabella rappresentata da EntityType . È possibile usare uno o più elementi PropertyRef per definire una chiave primaria. Per ulteriori informazioni, vedere Elemento Key.
  • Rappresenterà l'entità finale dipendente o principale di un vincolo referenziale. Per ulteriori informazioni, vedere Elemento ReferentialConstraint.

L'elemento PropertyRef può avere solo gli elementi figlio seguenti:

  • Documentation (zero o un elemento)
  • Elementi Annotation

Attributi applicabili

La tabella seguente descrive gli attributi che possono essere applicati all'elemento PropertyRef .

Nome attributo Obbligatorio Valore
Nome Nome della proprietà alla quale viene fatto riferimento.

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento PropertyRef . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento PropertyRef usato per definire una chiave primaria facendo riferimento a una proprietà definita in un elemento EntityType .

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

Elemento ReferentialConstraint (SSDL)

L'elemento ReferialConstraint nell'archivio schema definition language (SSDL) rappresenta un vincolo di chiave esterna (detto anche vincolo di integrità referenziale) nel database sottostante. Le estremità principale e dipendente del vincolo vengono specificate rispettivamente dagli elementi figlio Principal e Dependent. Alle colonne che fanno parte delle estremità principale e dipendente viene fatto riferimento tramite gli elementi PropertyRef.

L'elemento ReferialConstraint è un elemento figlio facoltativo dell'elemento Association. Se non viene utilizzato un elemento ReferialConstraint per eseguire il mapping del vincolo di chiave esterna specificato nell'elemento Association, è necessario utilizzare un elemento AssociationSetMapping per eseguire questa operazione.

L'elemento ReferialConstraint può avere gli elementi figlio seguenti:

  • Documentation (zero o un elemento)
  • Principal (esattamente un elemento)
  • Dependent (esattamente un elemento)
  • Elementi Annotation (zero o più elementi)

Attributi applicabili

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento ReferialConstraint . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene illustrato un elemento Association che usa un elemento ReferialConstraint per specificare le colonne che partecipano al vincolo di chiave esterna FK_CustomerOrders :

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

Elemento ReturnType (SSDL)

L'elemento ReturnType nell'archivio schema definition language (SSDL) specifica il tipo restituito per una funzione definita in un elemento Function . È anche possibile specificare un tipo restituito di funzione con un attributo ReturnType .

Il tipo restituito di una funzione viene specificato con l'attributo Type o l'elemento ReturnType .

L'elemento ReturnType può avere gli elementi figlio seguenti:

  • CollectionType (uno)

Nota

Qualsiasi numero di attributi di annotazione (attributi XML personalizzati) può essere applicato all'elemento ReturnType . Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a SSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

Esempio

Nell'esempio seguente viene utilizzata una funzione che restituisce una raccolta di righe.

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

Elemento RowType (SSDL)

Un elemento RowType nell'archivio schema definition language (SSDL) definisce una struttura senza nome come tipo restituito per una funzione definita nell'archivio.

Un elemento RowType è l'elemento figlio dell'elemento CollectionType :

Un elemento RowType può avere gli elementi figlio seguenti:

  • Property (uno o più elementi)

Esempio

Nell'esempio seguente viene illustrata una funzione store che usa un elemento CollectionType per specificare che la funzione restituisce una raccolta di righe , come specificato nell'elemento RowType .

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

Elemento Schema (SSDL)

L'elemento Schema nell'archivio schema definition language (SSDL) è l'elemento radice di una definizione di modello di archiviazione. Contiene definizioni per gli oggetti, le funzioni e i contenitori che costituiscono un modello di archiviazione.

L'elemento Schema può contenere zero o più degli elementi figlio seguenti:

  • Association Rules
  • EntityType
  • EntityContainer
  • Funzione

L'elemento Schema usa l'attributo Namespace per definire lo spazio dei nomi per il tipo di entità e gli oggetti di associazione in un modello di archiviazione. All'interno di uno spazio dei nomi due oggetti non possono avere lo stesso nome.

Uno spazio dei nomi del modello di archiviazione è diverso dallo spazio dei nomi XML dell'elemento Schema . Uno spazio dei nomi del modello di archiviazione (come definito dall'attributo Namespace ) è un contenitore logico per i tipi di entità e i tipi di associazione. Lo spazio dei nomi XML (indicato dall'attributo xmlns ) di un elemento Schema è lo spazio dei nomi predefinito per gli elementi figlio e gli attributi dell'elemento Schema . Gli spazi dei nomi XML del modulo https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (dove YYYY e MM rappresentano rispettivamente un anno e un mese) sono riservati per SSDL. Gli elementi e gli attributi personalizzati non possono essere in spazi dei nomi che hanno questo form.

Attributi applicabili

La tabella seguente descrive gli attributi che è possibile applicare all'elemento Schema .

Nome attributo Obbligatorio Valore
Namespace Spazio dei nomi del modello di archiviazione. Il valore dell'attributo Namespace viene utilizzato per formare il nome completo di un tipo. Ad esempio, se un EntityType denominato Customer si trova nello spazio dei nomi ExampleModel.Store, il nome completo di EntityType è ExampleModel.Store.Customer.
Le stringhe seguenti non possono essere usate come valore per l'attributo Namespace : System, Transient o Edm. Il valore per l'attributo Namespace non può essere uguale al valore dell'attributo Namespace nell'elemento Schema CSDL.
Alias No Identificatore utilizzato al posto del nome dello spazio dei nomi. Ad esempio, se un EntityType denominato Customer si trova nello spazio dei nomi ExampleModel.Store e il valore dell'attributo Alias è StorageModel, è possibile usare StorageModel.Customer come nome completo di EntityType.
Provider Provider di dati.
ProviderManifestToken Token che indica al provider quale manifesto del provider restituire. Non è definito alcun formato per il token. I valori per il token sono definiti dal provider. Per informazioni sui token manifesto del provider di SQL Server, vedere SqlClient per Entity Framework.

Esempio

Nell'esempio seguente viene illustrato un elemento Schema che contiene un elemento EntityContainer , due elementi EntityType e un elemento Association .

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

Attributi di annotazione

Gli attributi di annotazione in Store Schema Definition Language (SSDL) sono attributi XML personalizzati nel modello di archiviazione che forniscono metadati aggiuntivi sugli elementi del modello di archiviazione. Oltre ad avere una struttura XML valida, agli attributi di annotazione si applicano i vincoli seguenti:

  • Gli attributi di annotazione non devono trovarsi in spazi dei nomi XML riservati a SSDL.
  • I nomi completi di due attributi di annotazione non devono essere uguali.

È possibile applicare più attributi di annotazione a un determinato elemento SSDL. È possibile accedere ai metadati contenuti negli elementi di annotazione in fase di esecuzione usando le classi nello spazio dei nomi System.Data.Metadata.Edm.

Esempio

Nell'esempio seguente viene illustrato un elemento EntityType con un attributo di annotazione applicato alla proprietà OrderId . L'esempio mostra anche un elemento annotation aggiunto all'elemento 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>

Elementi Annotation (SSDL)

Gli elementi Annotation in SSDL (Store Schema Definition Language) sono elementi XML personalizzati nel modello di archiviazione che forniscono metadati aggiuntivi sul modello di archiviazione. Oltre ad avere una struttura XML valida, agli elementi Annotation si applicano i vincoli seguenti:

  • Gli elementi Annotation non devono trovarsi in spazi dei nomi XML riservati a SSDL.
  • I nomi completi di due elementi Annotation non devono essere uguali.
  • Gli elementi Annotation devono apparire dopo tutti gli altri elementi figlio di un dato elemento SSDL.

Più elementi Annotation possono essere figli di un dato elemento SSDL. A partire da .NET Framework versione 4, è possibile accedere ai metadati contenuti negli elementi di annotazione in fase di esecuzione usando le classi nello spazio dei nomi System.Data.Metadata.Edm.

Esempio

Nell'esempio seguente viene illustrato un elemento EntityType con un elemento annotation (CustomElement). L'esempio mostra anche un attributo di annotazione applicato alla proprietà OrderId .

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

Facet (SSDL)

I facet in Store Schema Definition Language (SSDL) rappresentano dei vincoli sui tipi di colonna specificati in elementi Property. I facet vengono implementati come attributi XML per gli elementi Property .

Nella tabella seguente vengono descritti i facet supportati in SSDL:

Facet Descrizione
Regole di confronto Specifica la sequenza di ordinamento da usare quando si eseguono operazioni di confronto e di ordinamento su valori della proprietà.
FixedLength Specifica se la lunghezza del valore della colonna può variare.
MaxLength Specifica la lunghezza massima del valore della colonna.
Precisione Per le proprietà di tipo Decimal, specifica il numero di cifre che un valore della proprietà può avere. Per le proprietà di tipo Time, DateTime e DateTimeOffset, specifica il numero di cifre per la parte frazionaria dei secondi del valore della colonna.
Scalabilità Specifica il numero di cifre a destra del separatore decimale per il valore della colonna.
Unicode Indica se il valore della colonna viene archiviato come Unicode.