Specifica SSDL

Nota

SSDL v1 non è supportato. Eseguire l'aggiornamento alla versione 3

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 tramite 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 dell'SSDL XML Namespace
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Elemento Association (SSDL)

Un elemento Association nel linguaggio di definizione dello schema di archiviazione (SSDL) specifica le colonne di tabella che partecipano a un vincolo di chiave esterna nel database sottostante. Due elementi end figlio obbligatori specificano tabelle alle estremità dell'associazione e la molteplicità a ogni fine. Un elemento ReferialConstraint facoltativo specifica le estremità principale e dipendente dell'associazione, nonché le colonne partecipanti. Se non è presente alcun elemento ReferialConstraint, è necessario utilizzare un elemento AssociationSetMapping per specificare i mapping di colonna per l'associazione.

L'elemento Association può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • End (esattamente due)
  • ReferentialConstraint (zero o uno)
  • Elementi Annotation (zero o più)

Attributi applicabili

La tabella seguente descrive 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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

L'esempio seguente mostra un elemento Association che usa un elemento ReferentialConstraint per specificare che 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) rappresenta un vincolo di chiave esterna tra due tabelle nel database sottostante. Le colonne della tabella che partecipano al 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 .

I set di associazioni SSDL vengono mappati ai 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 sottoposti a override dall'elemento ReferialConstraint.

L'elemento AssociationSet può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • End (zero o due)
  • Elementi Annotation (zero o più)

Attributi applicabili

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

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 vincolo di FK_CustomerOrders 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 nel linguaggio di definizione schema di archiviazione (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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 nel linguaggio di definizione dello schema di archiviazione (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ò avere 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 figlio CommandText. 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 DefiningQuerynel linguaggio di definizione dello schema di archiviazione (SSDL) 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) è un elemento figlio dell'elemento ReferialConstraint che definisce la fine dipendente di un vincolo di chiave esterna (detto anche vincolo referenziale). L'elemento Dependent 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 Dependent.

L'elemento Dependent può includere i seguenti elementi figlio (nell'ordine elencato):

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

Attributi applicabili

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

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento Dependent. 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

L'esempio seguente mostra un elemento ReferentialConstraint per specificare le colonne che partecipano al vincolo di chiave esterna FK_CustomerOrders. 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) può essere usato per fornire informazioni su un oggetto definito in un elemento padre.

L'elemento Documentation può includere i seguenti elementi figlio (nell'ordine elencato):

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

Attributi applicabili

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) specifica la tabella e il numero di righe alla fine di un vincolo di chiave esterna nel database sottostante. L'elemento End può essere un elemento 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 elemento 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ò includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentazione (zero o un elemento)
  • OnDelete (zero o un elemento)
  • Elementi annotazione (zero o più elementi)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento End quando è figlio di un elemento Association .

Nome attributo Obbligatorio Valore
Type Nome completo del set di entità SSDL che si trova alla fine del vincolo di chiave esterna.
Ruolo No Il valore dell'attributoRole nell'elemento Principal o Dependent dell'elemento ReferialConstraint corrispondente (se utilizzato).
Molteplicità 1, 0..1 o * a seconda del numero di righe che possono trovarsi 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, una o più righe esistono alla fine del vincolo di chiave esterna.

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 di chiave esternaFK_CustomerOrders. I valori Multiplicity specificati in ciascun elemento End indicano che molte righe nella tabella Orders possono essere associate alla riga nella tabella Customers, ma solo una riga nella tabella Customers può essere associata 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 elemento figlio dell'elemento AssociationSet ) specifica una tabella in corrispondenza di una fine di un vincolo di chiave esterna nel database sottostante.

Un elemento End può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • Elementi Annotation (zero o più)

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento End quando è figlio di un elemento Association .

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

L'esempio seguente mostra un elemento EntityContainer con due elementi AssociationSet , ognuno 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 associazioni (definiti negli elementi AssociationSet) rappresentano vincoli di chiave esterna in un database. Un contenitore di entità modello di archiviazione esegue il mapping a un contenitore di entità del modello concettuale tramite l'elemento EntityContainerMapping.

Un elemento EntityContainer può avere zero o uno elementi Documentation. 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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

Nell'esempio seguente viene illustrato 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) rappresenta una tabella o una vista nel database sottostante. Un elemento EntityType in SSDL rappresenta una riga nella tabella o nella vista. 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ò includere i seguenti elementi figlio (nell'ordine elencato):

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

Attributi applicabili

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

Nota

Alcuni attributi (non elencati qui) possono essere qualificati con l'alias di archiviazione. Questi attributi vengono usati dalla Creazione guidata modello di aggiornamento durante l'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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 che ha 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) rappresenta una riga in una tabella o vista nel database sottostante. Un elemento EntitySet in SSDL rappresenta la tabella o la vista in cui si verificano le righe. 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ò includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentazione (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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) specifica una stored procedure esistente nel database sottostante.

L'elemento Function può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • Parameter (zero o più)
  • CommandText (zero o uno)
  • ReturnType (zero o più)
  • Elementi Annotation (zero o più)

È necessario specificare un tipo restituito per una funzione con l'elemento ReturnType (Function) 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 maggiori informazioni, consultare la sezione Esecuzione di query con le stored procedure. L'elemento Function può essere usato anche per definire funzioni personalizzate nel modello di archiviazione.  

Attributi applicabili

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

Nota

Alcuni attributi (non elencati qui) possono essere qualificati con l'alias di archiviazione. Questi attributi vengono usati dalla Creazione guidata modello di aggiornamento durante l'aggiornamento di un modello.

Nome attributo Obbligatorio valore
Nome Nome della stored procedure.
ReturnType No Tipo restituito della stored procedure.
Aggregazione No True se la stored procedure restituisce un valore di aggregazione; in caso contrario , False.
BuiltIn No True se la funzione è una funzione predefinita 1; in caso contrario, False.
StoreFunctionName No Nome della stored procedure.
NiladicFunction No True se la funzione è una funzione niladic2 ; False in caso contrario.
IsComposable No True se la funzione è una funzione componibile3 in caso contrario, False.
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 niladic è 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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 nel linguaggio di definizione dello schema di archiviazione(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ò includere i seguenti elementi figlio (nell'ordine elencato):

  • PropertyRef (uno o più)
  • 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 nel linguaggio di definizione dello schema di archiviazione (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 None, non verranno eliminate le righe che fanno riferimento a una riga che viene eliminata. Un elemento OnDelete è un elemento figlio di un elemento End.

Un elemento OnDelete può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • Elementi Annotation (zero o più)

Attributi applicabili

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

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 esternaFK_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 nel linguaggio di definizione dello schema di archiviazione (SSDL) è un elemento figlio dell'elemento Function che specifica i parametri per una stored procedure nel database.

L'elemento Parameter può includere i seguenti elementi figlio (nell'ordine elencato):

  • Documentation (zero o una)
  • Elementi Annotation (zero o più)

Attributi applicabili

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

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

L'esempio seguente mostra 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) è un elemento figlio dell'elemento ReferialConstraint che definisce la fine dipendente di un vincolo di chiave esterna (detto anche vincolo referenziale). L'elemento Principal specifica la colonna chiave primaria (o le 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 Principal specifica le colonne chiave primaria a cui fanno riferimento le colonne specificate nell'elemento Principal.

L'elemento Principal può includere i seguenti elementi figlio (nell'ordine elencato):

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

Attributi applicabili

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

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

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

L'esempio seguente mostra un elemento ReferentialConstraint per specificare le colonne che partecipano al vincolo di chiave esterna FK_CustomerOrders. 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) rappresenta una colonna in una tabella nel database sottostante. Gli elementi Property sono elementi figlio di elementi EntityType, che rappresentano le righe di una tabella. Ogni elemento Property definito in un elemento EntityType rappresenta una colonna.

Un elemento Property non può contenere 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.
Type Tipo della colonna corrispondente.
Ammette i valori Null No True (valore predefinito) o False, a seconda che la colonna corrispondente possa avere 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 della colonna corrispondente venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione della colonna corrispondente.
Ridimensiona No Scala della colonna corrispondente.
Unicode No True o False, a seconda che il valore della colonna corrispondente venga archiviato come stringa di lunghezza 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 maggiori 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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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

L'esempio seguente mostra un elemento EntityType con due elementi figlio Property:

 <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 nel linguaggio di definizione dello schema di archiviazione (SSDL) fa riferimento a una proprietà definita su un elemento Entity Type 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 maggiori informazioni, vedere l'elemento Key.
  • Rappresenterà l'entità finale dipendente o principale di un vincolo referenziale. Per maggiori informazioni, vedere l'elemento ReferentialConstraint

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

  • Documentation (zero o una)
  • 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

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 utilizzato 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 ReferentialConstraint nel linguaggio di definizione dello schema di archiviazione (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. Le colonne che fanno parte delle estremità principali e dipendenti fanno riferimento agli elementi PropertyRef.

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

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

  • Documentation (zero o una)
  • Principal (esattamente uno)
  • Dependent (esattamente uno)
  • Elementi Annotation (zero o più)

Attributi applicabili

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ReferentialConstraint. 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 Association che usa un elemento ReferentialConstraint per specificare che 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 nel linguaggio di archiviazione dello schema di archiviazione (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 dell'elemento ReturnType (FunctionImport).

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

  • CollectionType (uno)

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) 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 un elemento Function 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 nel linguaggio di definizione dello schema di archiviazione (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ù)

Esempio

Nell'esempio seguente viene illustrata una funzione definita dal modello 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 nel linguaggio di definizione dello schema di archiviazione (SSDL) è l'elemento radice di una definizione del 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:

  • Associazione
  • EntityType
  • EntityContainer
  • Funzione

L'elemento Schema usa l'attributo Namespace per definire lo spazio dei nomi per il tipo di entità, il tipo complesso 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 rispettivamente YYYY e MM rappresentano 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 possono essere applicati all'elemento Schema.

Nome attributo Obbligatorio Valore
Spazio dei nomi 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.
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 per l'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 del manifesto del provider SQL Server, vedere SqlClient per Entity Framework.

Esempio

L'esempio seguente mostra 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. Nell'esempio viene inoltre mostrato un elemento di annotazione 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 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 nell'archivio del linguaggio di definizione dello schema (SSDL) rappresentano vincoli sui tipi di colonna specificati negli elementi Property. I facet vengono implementati come attributi XML sugli 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 di secondi del valore della colonna.
Ridimensiona 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.