Specifica CSDL

Conceptual Schema Definition Language (CSDL) è un linguaggio basato su XML che descrive le entità, le relazioni e le funzioni che costituiscono un modello concettuale di un'applicazione basata sui dati. Questo modello concettuale può essere usato da Entity Framework o WCF Data Services. I metadati descritti con CSDL vengono usati da Entity Framework per eseguire il mapping di entità e relazioni definite in un modello concettuale a un'origine dati. Per altre informazioni, vedere Specifica SSDL e Specifica MSL.

CSDL è l'implementazione di Entity Framework di Entity Data Model.

In un'applicazione Entity Framework, i metadati del modello concettuale vengono caricati da un file con estensione csdl (scritto in CSDL) in un'istanza di System.Data.Metadata.Edm.EdmItemCollection ed è accessibile tramite metodi nella classe System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework usa i metadati del modello concettuale per convertire le query sul modello concettuale in comandi specifici dell'origine dati.

Ef Designer archivia le informazioni sul modello concettuale in un file con estensione edmx in fase di progettazione. In fase di compilazione, Entity Framework Designer usa le informazioni in un file con estensione edmx per creare il file con estensione csdl necessario per Entity Framework in fase di esecuzione.

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

Versione CSDL Spazio dei nomi XML
CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

 

Elemento Association (CSDL)

Un elemento Association definisce una relazione tra due tipi di entità. Un'associazione deve specificare i tipi di entità coinvolti nella relazione e il possibile numero di tipi di entità a ogni entità finale della relazione, che è noto come molteplicità. La molteplicità di un'associazione finale può avere un valore pari a uno (1), zero o uno (0,.1) o molti (*). Queste informazioni vengono specificate in due elementi End figlio.

Le istanze del tipo di entità in corrispondenza di un'entità finale di un'associazione sono accessibili attraverso proprietà di navigazione o chiavi esterne se sono esposte in un tipo di entità.

In un'applicazione, un'istanza di un'associazione rappresenta un'associazione specifica tra istanze di tipi di entità. Le istanze dell'associazione sono raggruppate logicamente in un set di associazioni.

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

  • Documentazione (zero o un elemento)
  • Fine (esattamente 2 elementi)
  • ReferenzialeConstraint (zero o un elemento)
  • Elementi annotazione (zero o più elementi)

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome dell'associazione.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

L'esempio seguente mostra un elemento Association che definisce l'associazione CustomerOrders quando le chiavi esterne non sono state esposte nei tipi di entità Customer e Order . I valori di molteplicità per ogni fine dell'associazione indicano che molti ordini possono essere associati a un cliente, ma solo un cliente può essere associato a un ordine. Inoltre, l'elemento OnDelete indica che tutti gli ordini correlati a un determinato cliente e sono stati caricati in ObjectContext verranno eliminati se il cliente viene eliminato.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

L'esempio seguente mostra un elemento Association che definisce l'associazione CustomerOrders quando le chiavi esterne sono state esposte nei tipi di entità Customer e Order . Con chiavi esterne esposte, la relazione tra le entità viene gestita con un elemento ReferialConstraint . Un elemento AssociationSetMapping corrispondente non è necessario per eseguire il mapping di questa associazione all'origine dati.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
   <ReferentialConstraint>
        <Principal Role="Customer">
            <PropertyRef Name="Id" />
        </Principal>
        <Dependent Role="Order">
             <PropertyRef Name="CustomerId" />
         </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento AssociationSet (CSDL)

L'elemento AssociationSet nel linguaggio CSDL (Conceptual Schema Definition Language) è un contenitore logico per le istanze di associazione dello stesso tipo. Un set di associazioni fornisce una definizione per il raggruppamento di istanze di associazioni in modo che possano essere mappate a un'origine dati.  

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

  • Documentazione (zero o uno elementi consentiti)
  • Fine (esattamente due elementi necessari)
  • Elementi annotazione (zero o più elementi consentiti)

L'attributo Association specifica il tipo di associazione che un set di associazioni contiene. I set di entità che costituiscono le estremità di un set di associazioni vengono specificati con esattamente due elementi end figlio.

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del set di entità. Il valore dell'attributo Name non può essere uguale al valore dell'attributo Association .
Associazione Il nome completo dell'associazione le cui istanze sono contenute nel set di associazioni. L'associazione deve essere nello stesso spazio dei nomi del set di associazioni.

 

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

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento CollectionType (CSDL)

L'elemento CollectionType nel linguaggio CSDL (Conceptual Schema Definition Language) specifica che un parametro di funzione o un tipo restituito di funzione è una raccolta. L'elemento CollectionType può essere figlio dell'elemento Parameter o dell'elemento ReturnType (Function). Il tipo di raccolta può essere specificato utilizzando l'attributo Type o uno degli elementi figlio seguenti:

  • Collectiontype
  • ReferenceType
  • RowType
  • TypeRef

Nota

Un modello non verrà convalidato se il tipo di una raccolta viene specificato sia con l'attributo Type che con un elemento figlio.

 

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che è possibile applicare all'elemento CollectionType . Si noti che gli attributi DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode e Collation sono applicabili solo alle raccolte di EDMSimpleTypes.

Nome attributo Obbligatorio Valore
Tipo No Tipo della raccolta.
Ammette i valori Null No True (valore predefinito) o False, a seconda che la proprietà possa avere valore null.
[!NOTE]
> In CSDL v1 una proprietà di tipo complesso deve avere Nullable="False".
Defaultvalue No Valore predefinito della proprietà.
MaxLength No Lunghezza massima del valore della proprietà.
FixedLength No True o False a seconda che il valore della proprietà venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione del valore della proprietà.
Ridimensiona No Scala del valore della proprietà.
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)
Unicode No True o False a seconda che il valore della proprietà venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

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 tipi di entità Person , come specificato con l'attributo ElementType .

 <Function Name="LastNamesAfter">
        <Parameter Name="someString" Type="Edm.String"/>
        <ReturnType>
             <CollectionType  ElementType="SchoolModel.Person"/>
        </ReturnType>
        <DefiningExpression>
             SELECT VALUE p
             FROM SchoolEntities.People AS p
             WHERE p.LastName >= someString
        </DefiningExpression>
 </Function>

 

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="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

Nell'esempio seguente viene illustrata una funzione definita dal modello che usa l'elemento CollectionType per specificare che la funzione accetta come parametro una raccolta di tipi di entità Department .

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Elemento ComplexType (CSDL)

Un elemento ComplexType definisce una struttura di dati composta da proprietà EdmSimpleType o da altri tipi complessi.  Un tipo complesso può essere una proprietà di un tipo di entità o di un altro tipo complesso. Un tipo complesso è simile a un tipo di entità in quanto il tipo complesso definisce i dati. Tuttavia esistono alcune differenze importanti tra i tipi complessi e i tipi di entità:

  • I tipi complessi non dispongono di identità o chiavi e pertanto non possono esistere indipendentemente. I tipi complessi possono esistere solo come proprietà di tipi di entità o gli altri tipi complessi.
  • I tipi complessi non possono partecipare alle associazioni. Nessuna delle due estremità di un'associazione può essere un tipo complesso e pertanto le proprietà di navigazione non possono essere definite per tipi complessi.
  • Una proprietà di tipo complesso non può avere un valore null, sebbene ogni proprietà scalare di un tipo complesso possa essere impostata su Null.

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

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

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

Nome attributo Obbligatorio valore
Nome Nome del tipo complesso. Il nome di un tipo complesso non può essere uguale a quello di un altro tipo complesso, di un tipo di entità o di un'associazione che si trova entro l'ambito del modello.
BaseType No Nome di un altro tipo complesso che è il tipo di base del tipo complesso definito.
[!NOTE]
> Questo attributo non è applicabile in CSDL v1. L'ereditarietà per i tipi complessi non è supportata in quella versione.
Classi astratte No True o False (valore predefinito) a seconda che il tipo complesso sia un tipo astratto.
[!NOTE]
> Questo attributo non è applicabile in CSDL v1. I tipi complessi in quella versione non possono essere tipi astratti.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ComplexType . 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 tipo complesso, Address, con le proprietà EdmSimpleType StreetAddress, City, StateOrProvince, Country e PostalCode.

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Per definire il tipo complesso Address (sopra) come proprietà di un tipo di entità, è necessario dichiarare il tipo di proprietà nella definizione del tipo di entità. Nell'esempio seguente viene illustrata la proprietà Address come tipo complesso in un tipo di entità (server di pubblicazione):

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
       <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                           FromRole="Publisher" ToRole="Book" />
     </EntityType>

 

 

Elemento DefiningExpression (CSDL)

L'elemento DefiningExpression nel linguaggio CSDL (Conceptual Schema Definition Language) contiene un'espressione Entity SQL che definisce una funzione nel modello concettuale.  

Nota

Ai fini della convalida, un elemento DefiningExpression può contenere contenuto arbitrario. Tuttavia, Entity Framework genererà un'eccezione in fase di esecuzione se un elemento DefiningExpression non contiene entity SQL valido.

 

Attributi applicabili

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento DefiningExpression . 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 utilizzato un elemento DefiningExpression per definire una funzione che restituisce il numero di anni trascorsi dalla pubblicazione di un libro. Il contenuto dell'elemento DefiningExpression viene scritto in Entity SQL.

 <Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
       <Parameter Name="book" Type="BooksModel.Book" />
       <DefiningExpression>
         Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
       </DefiningExpression>
     </Function>

 

 

Elemento Dependent (CSDL)

L'elemento Dependent nel linguaggio CSDL (Conceptual Schema Definition Language) è un elemento figlio dell'elemento ReferialConstraint e definisce la fine dipendente di un vincolo referenziale. Un elemento ReferialConstraint definisce funzionalità simili a un vincolo di integrità referenziale in un database relazionale. Nello stesso modo in cui una colonna (o più colonne) da una tabella di database può fare riferimento alla chiave primaria di un'altra tabella, una proprietà (o più proprietà) di un tipo di entità può fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità a cui viene fatto riferimento è denominato fine principale del vincolo. Il tipo di entità che fa riferimento all'entità finale è denominato fine dipendente del vincolo. Gli elementi PropertyRef vengono utilizzati per specificare quali chiavi fanno riferimento alla fine dell'entità.

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

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

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Ruolo Nome del tipo di entità in un'entità finale dipendente dell'associazione.

 

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

Nell'esempio seguente viene illustrato un elemento ReferialConstraint utilizzato come parte della definizione dell'associazione PublishedBy . La proprietà PublisherId del tipo di entità Book costituisce la fine dipendente del vincolo referenziale.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento Documentation (CSDL)

L'elemento Documentation nel linguaggio CSDL (Conceptual Schema Definition Language) può essere usato per fornire informazioni su un oggetto definito in un elemento padre. In un file con estensione edmx, quando l'elemento Documentation è un elemento figlio di un elemento visualizzato come oggetto nell'area di progettazione di Ef Designer (ad esempio un'entità, un'associazione o una proprietà), il contenuto dell'elemento Documentation verrà visualizzato nella finestra Proprietà di Visual Studio per l'oggetto.

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

  • Riepilogo: breve descrizione dell'elemento padre. Zero o un elemento.
  • LongDescription: descrizione completa dell'elemento padre. Zero o un elemento.
  • Elementi annotazione. Zero o più elementi.

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. Se il frammento di codice seguente si trova nel contenuto CSDL di un file con estensione edmx, il contenuto degli elementi Summary e LongDescription verrà visualizzato nella finestra Proprietà di Visual Studio quando si fa clic sul Customer tipo di entità.

 <EntityType Name="Customer">
    <Documentation>
      <Summary>Summary here.</Summary>
      <LongDescription>Long description here.</LongDescription>
    </Documentation>
    <Key>
      <PropertyRef Name="CustomerId" />
    </Key>
    <Property Type="Int32" Name="CustomerId" Nullable="false" />
    <Property Type="String" Name="Name" Nullable="false" />
 </EntityType>

 

 

Elemento End (CSDL)

L'elemento End nel linguaggio CSDL (Conceptual Schema Definition Language) può essere figlio dell'elemento Association o dell'elemento AssociationSet. In ogni caso, il ruolo dell'elemento End è diverso e gli attributi applicabili sono diversi.

Elemento End come figlio dell'elemento Association

Un elemento End (come elemento figlio dell'elemento Association ) identifica il tipo di entità in un'estremità di un'associazione e il numero di istanze del tipo di entità che possono esistere alla fine di un'associazione. Le entità finali dell'associazione sono definite come parte di un'associazione; un'associazione deve disporre esattamente di due entità finali. Le istanze del tipo di entità in corrispondenza di un'entità finale di un'associazione sono accessibili attraverso proprietà di navigazione o chiavi esterne se sono esposte in un tipo di entità.  

Un elemento End può avere gli elementi figlio seguenti (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
Tipo Nome del tipo di entità in una entità finale dell'associazione.
Ruolo No Nome per l'entità finale dell'associazione. Se non è fornito alcun nome, verrà utilizzato il nome del tipo di entità nell'entità finale dell'associazione.
Molteplicità 1, 0..1 o * a seconda del numero di istanze del tipo di entità che possono trovarsi alla fine dell'associazione.
1 indica che alla fine dell'associazione esiste esattamente un'istanza del tipo di entità.
0..1 indica che zero o una istanza del tipo di entità esistono alla fine dell'associazione.
* indica che zero, una o più istanze del tipo di entità esistono alla fine dell'associazione.

 

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 l'associazione CustomerOrders . I valori di molteplicità per ogni fine dell'associazione indicano che molti ordini possono essere associati a un cliente, ma solo un cliente può essere associato a un ordine. Inoltre, l'elemento OnDelete indica che tutti gli ordini correlati a un determinato cliente e che sono stati caricati in ObjectContext verranno eliminati se il cliente viene eliminato.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
         <OnDelete Action="Cascade" />
   </End>
 </Association>

 

Elemento End come figlio dell'elemento AssociationSet

L'elemento End specifica un'estremità di un set di associazioni. L'elemento AssociationSet deve contenere due elementi End . Le informazioni contenute in un elemento End vengono utilizzate per eseguire il mapping di un set di associazioni a un'origine dati.

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

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

Nota

Gli elementi Annotation devono apparire dopo tutti gli altri elementi figlio. Gli elementi di annotazione sono consentiti solo in CSDL v2 e versioni successive.

 

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Entityset Nome dell'elemento EntitySet che definisce una fine dell'elemento AssociationSet padre. L'elemento EntitySet deve essere definito nello stesso contenitore di entità dell'elemento AssociationSet padre.
Ruolo No Nome dell'entità finale del set di associazioni. Se l'attributo Role non viene usato, il nome della fine del set di associazioni sarà il nome del set di entità.

 

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="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntityContainer (CSDL)

L'elemento EntityContainer nel linguaggio CSDL (Conceptual Schema Definition Language) è un contenitore logico per set di entità, set di associazioni e importazioni di funzioni. Un contenitore di entità modello concettuale esegue il mapping a un contenitore di entità del modello di archiviazione tramite l'elemento EntityContainerMapping. Un contenitore di entità del modello di archiviazione descrive la struttura del database: i set di entità descrivono le tabelle, i set di associazioni descrivono i vincoli delle chiavi esterne e le importazioni di funzioni descrivono le stored procedure in un database.

Un elemento EntityContainer può avere zero o uno elementi Documentation. Se è presente un elemento Documentation, deve precedere tutti gli elementi EntitySet, AssociationSet e FunctionImport.

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

  • EntitySet
  • AssociationSet
  • FunctionImport
  • Elementi Annotation

È possibile estendere un elemento EntityContainer per includere il contenuto di un altro EntityContainer all'interno dello stesso spazio dei nomi. Per includere il contenuto di un altro EntityContainer, nell'elemento EntityContainer di riferimento impostare il valore dell'attributo Extends sul nome dell'elemento EntityContainer che si desidera includere. Tutti gli elementi figlio dell'elemento EntityContainer incluso verranno considerati come elementi figlio dell'elemento EntityContainer di riferimento.

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del contenitore di entità.
Si estende No Nome di un altro contenitore di entità all'interno dello stesso spazio dei nomi.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente viene illustrato un elemento EntityContainer che definisce tre set di entità e due set di associazioni.

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntitySet (CSDL)

L'elemento EntitySet nel linguaggio di definizione dello schema concettuale è un contenitore logico per le istanze di un tipo di entità e istanze di qualsiasi tipo derivato da tale tipo di entità. La relazione tra un tipo di entità e un set di entità è analoga alla relazione tra una riga e una tabella in un database relazionale. Analogamente a una riga, un tipo di entità definisce un set di dati correlati e, analogamente a una tabella, un set di entità contiene istanze di quella definizione. Un set di entità fornisce un construct per il raggruppamento di istanze del tipo di entità in modo che se ne possa eseguire il mapping alle strutture dei dati correlati in un'origine dati.  

È possibile definire più set di entità per un particolare tipo di entità.

Nota

Ef Designer non supporta modelli concettuali che contengono più set di entità per tipo.

 

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

  • Elemento Documentation (zero o uno elementi consentiti)
  • Elementi annotazione (zero o più elementi consentiti)

Attributi applicabili

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

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.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

L'esempio seguente mostra un elemento EntityContainer con tre elementi EntitySet :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

È possibile definire più set di entità per tipo (MEST). L'esempio seguente definisce un contenitore di entità con due set di entità per il tipo di entità Book :

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

Elemento EntityType (CSDL)

L'elemento EntityType rappresenta la struttura di un concetto di primo livello, ad esempio un cliente o un ordine, in un modello concettuale. Un tipo di entità è un modello per istanze di tipi di entità in un'applicazione. Ogni modello contiene le informazioni seguenti:

  • Un nome univoco. Obbligatorio.
  • Una chiave di entità che è definita da una o più proprietà. Obbligatorio.
  • Proprietà per contenere dati. (Facoltativo)
  • Proprietà di navigazione che consentono di navigare da un'entità finale di un'associazione all'altra. (Facoltativo)

In un'applicazione, un'istanza di un tipo di entità rappresenta un oggetto specifico, quale ad esempio un cliente o un ordine specifico. Ogni istanza di un tipo di entità deve avere una chiave di entità univoca all'interno di un set di entità.

Due istanze di tipi di entità sono considerate uguali solo se sono dello stesso tipo e se i valori delle rispettive chiavi di entità sono uguali.

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

  • Documentazione (zero o un elemento)
  • Chiave (zero o un elemento)
  • Proprietà (zero o più elementi)
  • NavigationProperty (zero o più elementi)
  • Elementi annotazione (zero o più elementi)

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à.
BaseType No Nome di un altro tipo di entità, che rappresenta il tipo di base del tipo di entità in corso di definizione.
Contenuto No True o False, a seconda che il tipo di entità sia un tipo astratto.
Opentype No True o False a seconda che il tipo di entità sia un tipo di entità aperto.
[!NOTE]
> L'attributo OpenType è applicabile solo ai tipi di entità definiti nei modelli concettuali usati con ADO.NET Data Services.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

L'esempio seguente mostra un elemento EntityType con tre elementi Property e due elementi NavigationProperty:

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

Elemento EnumType (CSDL)

L'elemento EnumType rappresenta un tipo enumerato.

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

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

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del tipo di entità.
IsFlags No True o False, a seconda che il tipo di enumerazione possa essere usato come set di flag. Il valore predefinito è False.
Underlyingtype No Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 o Edm.SByte che definisce l'intervallo di valori del tipo.   Il tipo sottostante predefinito di elementi di enumerazione è Edm.Int32..

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento EnumType . 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 EnumType con tre elementi Member :

 <EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
   <Member Name="Red" />
   <Member Name="Green" />
   <Member Name="Blue" />
 </EntityType>

 

 

Elemento Function (CSDL)

L'elemento Function nel linguaggio CSDL (Conceptual Schema Definition Language) viene usato per definire o dichiarare funzioni nel modello concettuale. Una funzione viene definita usando un elemento DefiningExpression.  

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

  • Documentazione (zero o un elemento)
  • Parametro (zero o più elementi)
  • Definizione diExpression (zero o un elemento)
  • ReturnType (Function) (zero o un elemento)
  • Elementi annotazione (zero o più elementi)

È necessario specificare un tipo restituito per una funzione con l'elemento ReturnType (Function) o l'attributo ReturnType (vedere di seguito), ma non entrambi. I tipi restituiti possibili sono il edmSimpleType, il tipo di entità, il tipo complesso, il tipo di riga o il tipo di riferimento o una raccolta di uno di questi tipi.

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome della funzione.
Returntype No Tipo restituito dalla 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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente viene usato un elemento Function per definire una funzione che restituisce il numero di anni dall'assunzione di un insegnante.

 <Function Name="YearsSince" ReturnType="Edm.Int32">
   <Parameter Name="date" Type="Edm.DateTime" />
   <DefiningExpression>
     Year(CurrentDateTime()) - Year(date)
   </DefiningExpression>
 </Function>

 

 

Elemento FunctionImport (CSDL)

L'elemento FunctionImport nel linguaggio CSDL (Conceptual Schema Definition Language) rappresenta una funzione definita nell'origine dati, ma disponibile per gli oggetti tramite il modello concettuale. Ad esempio, un elemento Function nel modello di archiviazione può essere usato per rappresentare una stored procedure in un database. Un elemento FunctionImport nel modello concettuale rappresenta la funzione corrispondente in un'applicazione Entity Framework ed è mappato alla funzione del modello di archiviazione usando l'elemento FunctionImportMapping. Quando la funzione viene chiamata nell'applicazione, la stored procedure corrispondente viene eseguita nel database.

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

  • Documentazione (zero o uno elementi consentiti)
  • Parametro (zero o più elementi consentiti)
  • Elementi annotazione (zero o più elementi consentiti)
  • ReturnType (FunctionImport) (zero o più elementi consentiti)

È necessario definire un elemento Parameter per ogni parametro accettato dalla funzione.

È necessario specificare un tipo restituito per una funzione con l'elemento ReturnType (FunctionImport) o l'attributo ReturnType (vedere di seguito), ma non entrambi. Il valore del tipo restituito deve essere una raccolta di EdmSimpleType, EntityType o ComplexType.

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome della funzione importata.
Returntype No Tipo restituito dalla funzione. Non utilizzare questo attributo se la funzione non restituisce un valore. In caso contrario, il valore deve essere una raccolta di ComplexType, EntityType o EDMSimpleType.
Entityset No Se la funzione restituisce una raccolta di tipi di entità, il valore di EntitySet deve essere il set di entità a cui appartiene la raccolta. In caso contrario, l'attributo EntitySet non deve essere utilizzato.
IsComposable No Se il valore è impostato su true, la funzione è componibile (funzione con valori di tabella) e può essere usata in una query LINQ.  L'impostazione predefinita è false.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento FunctionImport . 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 FunctionImport che accetta un parametro e restituisce una raccolta di tipi di entità:

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

 

Elemento Key (CSDL)

L'elemento Key è un elemento figlio dell'elemento EntityType e definisce una chiave di entità (una proprietà o un set di proprietà di un tipo di entità che determinano l'identità). Le proprietà che costituiscono una chiave di entità vengono scelte in fase di progettazione. I valori delle proprietà della chiave di entità devono identificare in modo univoco in fase di esecuzione un'istanza del tipo di entità all'interno di un set di entità. Le proprietà che costituiscono una chiave di entità devono essere scelte per garantire univocità delle istanze in un set di entità. L'elemento Key definisce una chiave di entità facendo riferimento a una o più proprietà di un tipo di entità.

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

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

Attributi applicabili

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento Key . 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 definisce un tipo di entità denominato Book. La chiave di entità viene definita facendo riferimento alla proprietà ISBN del tipo di entità.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

La proprietà ISBN è una buona scelta per la chiave di entità perché un isBN (International Standard Book Number) identifica in modo univoco un libro.

Nell'esempio seguente viene illustrato un tipo di entità (Author) con una chiave di entità costituita da due proprietà, Nome e Indirizzo.

 <EntityType Name="Author">
   <Key>
     <PropertyRef Name="Name" />
     <PropertyRef Name="Address" />
   </Key>
   <Property Type="String" Name="Name" Nullable="false" />
   <Property Type="String" Name="Address" Nullable="false" />
   <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                       FromRole="Author" ToRole="Book" />
 </EntityType>

 

L'uso di Name e Address per la chiave di entità è una scelta ragionevole, perché è improbabile che due autori dello stesso nome si trovino nello stesso indirizzo. Questa scelta per una chiave di entità non garantisce tuttavia in modo assoluto chiavi di entità univoche in un set di entità. In questo caso, è consigliabile aggiungere una proprietà, ad esempio AuthorId, che potrebbe essere usata per identificare in modo univoco un autore.

 

Elemento Member (CSDL)

L'elemento Member è un elemento figlio dell'elemento EnumType e definisce un membro del tipo enumerato.

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del membro.
Valore No Valore del membro. Per impostazione predefinita, il primo membro ha il valore 0 e il valore di ogni enumeratore successivo viene incrementato di 1. Possono esistere più membri con gli stessi valori.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento FunctionImport . 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 EnumType con tre elementi Member :

 <EnumType Name="Color">
   <Member Name="Red" Value=”1”/>
   <Member Name="Green" Value=”3” />
   <Member Name="Blue" Value=”5”/>
 </EntityType>

 

 

Un elemento NavigationProperty definisce una proprietà di navigazione, che fornisce un riferimento all'altra estremità di un'associazione. A differenza delle proprietà definite con l'elemento Property, le proprietà di navigazione non definiscono la forma e le caratteristiche dei dati. Forniscono un modo per navigare in un'associazione tra due tipi di entità.

Si noti che le proprietà di navigazione sono facoltative in entrambi tipi di entità nelle entità finali di un'associazione. Se si definisce una proprietà di navigazione su un tipo di entità nell'entità finale di un'associazione, non è necessario definire una proprietà di navigazione sul tipo di entità nell'altra entità finale dell'associazione.

Il tipo di dati restituito da una proprietà di navigazione è determinato dalla molteplicità della relativa entità finale di associazione remota. Si supponga, ad esempio, che una proprietà di navigazione OrdersNavProp esista in un tipo di entità Customer e si sposta in un'associazione uno-a-molti tra Customer e Order. Poiché l'estremità dell'associazione remota per la proprietà di navigazione ha molti (*), il tipo di dati è una raccolta (di Order). Analogamente, se una proprietà di navigazione, CustomerNavProp, esiste nel tipo di entità Order , il tipo di dati sarà Customer poiché la molteplicità dell'endpoint remoto è una (1).

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

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

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome della proprietà di navigazione.
Relazione Nome di un'associazione che è all'interno dell'ambito del modello.
ToRole Entità finale dell'associazione in corrispondenza della quale termina la navigazione. Il valore dell'attributo ToRole deve essere uguale al valore di uno degli attributi Role definiti in una delle estremità dell'associazione (definito nell'elemento AssociationEnd).
FromRole Entità finale dell'associazione dalla quale ha inizio la navigazione. Il valore dell'attributo FromRole deve essere uguale al valore di uno degli attributi Role definiti in una delle estremità dell'associazione (definito nell'elemento AssociationEnd).

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento NavigationProperty . 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 definisce un tipo di entità (Book) con due proprietà di navigazione (PublishedBy e WrittenBy):

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

Elemento OnDelete (CSDL)

L'elemento OnDelete nel linguaggio CSDL (Conceptual Schema Definition Language) definisce il comportamento connesso a un'associazione. Se l'attributo Action è impostato su Cascade su un'estremità di un'associazione, i tipi di entità correlati sull'altra estremità dell'associazione vengono eliminati quando il tipo di entità sulla prima estremità viene eliminato. Se l'associazione tra due tipi di entità è una relazione di chiave primaria a chiave primaria primaria, un oggetto dipendente caricato viene eliminato quando l'oggetto principale sull'altra estremità dell'associazione viene eliminato indipendentemente dalla specifica OnDelete .  

Nota

L'elemento OnDelete influisce solo sul comportamento di runtime di un'applicazione e non influisce sul comportamento nell'origine dati. Il comportamento definito nell'origine dati deve essere uguale al comportamento definito nell'applicazione.

 

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

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

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Azione Cascata o Nessuno. Se Cascade, i tipi di entità dipendenti verranno eliminati quando viene eliminato il tipo di entità principale. Se Nessuno, i tipi di entità dipendenti non verranno eliminati quando viene eliminato il tipo di entità principale.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente viene illustrato un elemento Association che definisce l'associazione CustomerOrders . L'elemento OnDelete indica che tutti gli ordini correlati a un determinato cliente e che sono stati caricati in ObjectContext verranno eliminati quando il cliente viene eliminato.

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

 

Elemento Parameter (CSDL)

L'elemento Parameter nel linguaggio CSDL (Conceptual Schema Definition Language) può essere figlio dell'elemento FunctionImport o dell'elemento Function.

Applicazione dell'elemento FunctionImport

Un elemento Parameter (come elemento figlio dell'elemento FunctionImport ) viene usato per definire i parametri di input e output per le importazioni di funzioni dichiarate in CSDL.

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

  • Documentazione (zero o uno elementi consentiti)
  • Elementi annotazione (zero o più elementi consentiti)

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del parametro.
Tipo Tipo di parametro. Il valore deve essere di tipo EDMSimpleType o di un tipo complesso compreso nell'ambito del modello.
Modalità No In, Out o InOut a seconda che il parametro sia un parametro di input, output o input/output.
MaxLength No Lunghezza massima consentita per il 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 altre 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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

L'esempio seguente mostra un elemento FunctionImport con un elemento figlio Parameter . La funzione accetta un parametro di input e restituisce una raccolta di tipi di entità.

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

Applicazione dell'elemento Function

Un elemento Parameter (come elemento figlio dell'elemento Function ) definisce i parametri per le funzioni definite o dichiarate in un modello concettuale.

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

  • Documentazione (zero o uno elementi)
  • CollectionType (zero o uno elementi)
  • ReferenceType (zero o uno elementi)
  • RowType (zero o uno elementi)

Nota

Solo uno degli elementi CollectionType, ReferenceType o RowType può essere un elemento figlio di un elemento Property .

 

  • Elementi annotazione (zero o più elementi consentiti)

Nota

Gli elementi Annotation devono apparire dopo tutti gli altri elementi figlio. Gli elementi di annotazione sono consentiti solo in CSDL v2 e versioni successive.

 

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome del parametro.
Tipo No Tipo di parametro. Un parametro può essere uno dei tipi seguenti (o raccolte di questi tipi):
EdmSimpleType
tipo di entità
tipo complesso
tipo di riga
tipo di riferimento
Ammette i valori Null No True (valore predefinito) o False a seconda che la proprietà possa avere un valore Null .
Defaultvalue No Valore predefinito della proprietà.
MaxLength No Lunghezza massima del valore della proprietà.
FixedLength No True o False a seconda che il valore della proprietà venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione del valore della proprietà.
Ridimensiona No Scala del valore della proprietà.
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).
Unicode No True o False a seconda che il valore della proprietà venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente viene illustrato un elemento Function che usa un elemento figlio Parameter per definire un parametro di funzione.

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
 <Parameter Name="Instructor" Type="SchoolModel.Person" />
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

Elemento Principal (CSDL)

L'elemento Principal nel linguaggio CSDL (Conceptual Schema Definition Language) è un elemento figlio dell'elemento ReferialConstraint che definisce la fine principale di un vincolo referenziale. Un elemento ReferialConstraint definisce funzionalità simili a un vincolo di integrità referenziale in un database relazionale. Nello stesso modo in cui una colonna (o più colonne) da una tabella di database può fare riferimento alla chiave primaria di un'altra tabella, una proprietà (o più proprietà) di un tipo di entità può fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità a cui viene fatto riferimento è denominato fine principale del vincolo. Il tipo di entità che fa riferimento all'entità finale è denominato fine dipendente del vincolo. Gli elementi PropertyRef vengono utilizzati per specificare quali chiavi fanno riferimento alla fine dipendente.

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

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

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Ruolo Nome del tipo di entità in un'entità finale principale dell'associazione.

 

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

Nell'esempio seguente viene illustrato un elemento ReferialConstraint che fa parte della definizione dell'associazione PublishedBy . La proprietà Id del tipo di entità Publisher costituisce la fine principale del vincolo referenziale.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento Property (CSDL)

L'elemento Property nel linguaggio CSDL (Conceptual Schema Definition Language) può essere figlio dell'elemento EntityType, dell'elemento ComplexType o dell'elemento RowType.

Applicazione degli elementi EntityType e ComplexType

Gli elementi della proprietà (come elementi Figlio di Elementi EntityType o ComplexType ) definiscono la forma e le caratteristiche dei dati che un'istanza del tipo di entità o un'istanza di tipo complesso conterrà. Le proprietà in un modello concettuale sono analoghe alle proprietà definite su una classe. Nello stesso modo in cui le proprietà su una classe definiscono la forma della classe e forniscono informazioni su oggetti, le proprietà in un modello concettuale definiscono la forma di un tipo di entità e forniscono informazioni su istanze del tipo di entità.

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

  • Elemento Documentation (zero o uno elementi consentiti)
  • Elementi annotazione (zero o più elementi consentiti)

I facet seguenti possono essere applicati a un elemento Property: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. I facet sono attributi XML che forniscono informazioni sul modo in cui i valori di proprietà vengono archiviati nell'archivio dati.

Nota

I facet possono essere applicati solo alle proprietà di tipo EDMSimpleType.

 

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome della proprietà.
Tipo Tipo del valore della proprietà. Il tipo del valore della proprietà deve corrispondere a EDMSimpleType o a un tipo complesso (indicato da un nome completo) nell'ambito del modello.
Ammette i valori Null No True (valore predefinito) o False, a seconda che la proprietà possa avere valore null.
[!NOTE]
> In CSDL v1 una proprietà di tipo complesso deve avere Nullable="False".
Defaultvalue No Valore predefinito della proprietà.
MaxLength No Lunghezza massima del valore della proprietà.
FixedLength No True o False a seconda che il valore della proprietà venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione del valore della proprietà.
Ridimensiona No Scala del valore della proprietà.
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).
Unicode No True o False a seconda che il valore della proprietà venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.
Concurrencymode No None (valore predefinito) o Fixed. Se il valore è impostato su Fixed, il valore della proprietà verrà utilizzato nei controlli della concorrenza ottimistica.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

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

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

L'esempio seguente mostra un elemento ComplexType con cinque elementi Property :

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

Applicazione dell'elemento RowType

Gli elementi proprietà (come elementi figlio di un elemento RowType ) definiscono la forma e le caratteristiche dei dati che possono essere passati o restituiti da una funzione definita dal modello.  

L'elemento Property può avere esattamente uno degli elementi figlio seguenti:

  • CollectionType
  • ReferenceType
  • RowType

L'elemento Property può avere qualsiasi numero di elementi di annotazione figlio.

Nota

Gli elementi di annotazione sono consentiti solo in CSDL v2 e versioni successive.

 

Attributi applicabili

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

Nome attributo Obbligatorio valore
Nome Nome della proprietà.
Tipo Tipo del valore della proprietà.
Ammette i valori Null No True (valore predefinito) o False, a seconda che la proprietà possa avere valore null.
[!NOTE]
> In CSDL v1 una proprietà di tipo complesso deve avere Nullable="False".
Defaultvalue No Valore predefinito della proprietà.
MaxLength No Lunghezza massima del valore della proprietà.
FixedLength No True o False a seconda che il valore della proprietà venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione del valore della proprietà.
Ridimensiona No Scala del valore della proprietà.
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).
Unicode No True o False a seconda che il valore della proprietà venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente vengono illustrati gli elementi Property utilizzati per definire la forma del tipo restituito di una funzione definita dal modello.

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

 

Elemento PropertyRef (CSDL)

L'elemento PropertyRef nel linguaggio CSDL (Conceptual Schema Definition Language) fa riferimento a una proprietà di un tipo di entità per indicare che la proprietà eseguirà uno dei ruoli seguenti:

  • Parte della chiave di entità (una proprietà o un set di proprietà di un tipo di entità che determinano l'identità). È possibile usare uno o più elementi PropertyRef per definire una chiave di entità.
  • L'entità finale dipendente o principale di un vincolo referenziale.

L'elemento PropertyRef può avere solo elementi di annotazione (zero o più) come elementi figlio.

Nota

Gli elementi di annotazione sono consentiti solo in CSDL v2 e versioni successive.

 

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

L'esempio seguente definisce un tipo di entità (Book). La chiave di entità viene definita facendo riferimento alla proprietà ISBN del tipo di entità.

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

Nell'esempio seguente vengono usati due elementi PropertyRef per indicare che due proprietà (Id e PublisherId) sono le estremità principale e dipendente di un vincolo referenziale.

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento ReferenceType (CSDL)

L'elemento ReferenceType nel linguaggio CSDL (Conceptual Schema Definition Language) specifica un riferimento a un tipo di entità. L'elemento ReferenceType può essere figlio degli elementi seguenti:

  • ReturnType (Function)
  • Parametro
  • CollectionType

L'elemento ReferenceType viene utilizzato quando si definisce un parametro o un tipo restituito per una funzione.

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

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

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Tipo Nome del tipo di entità a cui viene fatto riferimento.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ReferenceType . 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 ReferenceType usato come elemento figlio di un elemento Parameter in una funzione definita dal modello che accetta un riferimento a un tipo di entità Person:

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
   <Parameter Name="instructor">
     <ReferenceType Type="SchoolModel.Person" />
   </Parameter>
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

L'esempio seguente mostra l'elemento ReferenceType usato come elemento figlio di un elemento ReturnType (Function) in una funzione definita dal modello che restituisce un riferimento a un tipo di entità Person :

 <Function Name="GetPersonReference">
     <Parameter Name="p" Type="SchoolModel.Person" />
     <ReturnType>
         <ReferenceType Type="SchoolModel.Person" />
     </ReturnType>
     <DefiningExpression>
           REF(p)
     </DefiningExpression>
 </Function>

 

 

Elemento ReferentialConstraint (CSDL)

Un elemento ReferialConstraint nel linguaggio CSDL (Conceptual Schema Definition Language) definisce funzionalità simili a un vincolo di integrità referenziale in un database relazionale. Nello stesso modo in cui una colonna (o più colonne) da una tabella di database può fare riferimento alla chiave primaria di un'altra tabella, una proprietà (o più proprietà) di un tipo di entità può fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità a cui viene fatto riferimento è denominato fine principale del vincolo. Il tipo di entità che fa riferimento all'entità finale è denominato fine dipendente del vincolo.

Se una chiave esterna esposta su un tipo di entità fa riferimento a una proprietà su un altro tipo di entità, l'elemento ReferialConstraint definisce un'associazione tra i due tipi di entità. Poiché l'elemento ReferialConstraint fornisce informazioni sul modo in cui due tipi di entità sono correlati, non è necessario alcun elemento AssociationSetMapping corrispondente nel linguaggio msl (mapping specification language). Un'associazione tra due tipi di entità che non dispongono di chiavi esterne esposte deve avere un elemento AssociationSetMapping corrispondente per eseguire il mapping delle informazioni di associazione all'origine dati.

Se una chiave esterna non è esposta in un tipo di entità, l'elemento ReferialConstraint può definire solo un vincolo di chiave primaria a chiave primaria tra il tipo di entità e un altro tipo di entità.

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

  • Documentazione (zero o un elemento)
  • Principal (esattamente un elemento)
  • Dipendente (esattamente un elemento)
  • Elementi annotazione (zero o più elementi)

Attributi applicabili

L'elemento ReferialConstraint può avere un numero qualsiasi di attributi di annotazione (attributi XML personalizzati). 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 ReferialConstraint utilizzato come parte della definizione dell'associazione PublishedBy .

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Elemento ReturnType (Function) (CSDL)

L'elemento ReturnType (Function) nel linguaggio CSDL (Conceptual Schema Definition Language) specifica il tipo restituito per una funzione definita in un elemento Function. È anche possibile specificare un tipo restituito di funzione con un attributo ReturnType .

I tipi restituiti possono essere qualsiasi edmSimpleType, tipo di entità, tipo complesso, tipo di riga, tipo ref o una raccolta di uno di questi tipi.

Il tipo restituito di una funzione può essere specificato con l'attributo Type dell'elemento ReturnType (Function) o con uno degli elementi figlio seguenti:

  • CollectionType
  • ReferenceType
  • RowType

Nota

Un modello non verrà convalidato se si specifica un tipo restituito di funzione con l'attributo Type dell'elemento ReturnType (Function) e uno degli elementi figlio.

 

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che è possibile applicare all'elemento ReturnType (Function).

Nome attributo Obbligatorio Valore
Returntype No Tipo restituito dalla funzione.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ReturnType (Function). 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 utilizzato un elemento Function per definire una funzione che restituisce il numero di anni in cui è stato stampato un libro. Si noti che il tipo restituito viene specificato dall'attributo Type di un elemento ReturnType (Function).

 <Function Name="GetYearsInPrint">
   <ReturnType Type=="Edm.Int32">
   <Parameter Name="book" Type="BooksModel.Book" />
   <DefiningExpression>
    Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
   </DefiningExpression>
 </Function>

 

 

Elemento ReturnType (FunctionImport) (CSDL)

L'elemento ReturnType (FunctionImport) nel linguaggio CSDL (Conceptual Schema Definition Language) specifica il tipo restituito per una funzione definita in un elemento FunctionImport. È anche possibile specificare un tipo restituito di funzione con un attributo ReturnType .

I tipi restituiti possono essere qualsiasi raccolta di tipi di entità, tipi complessi o EdmSimpleType,

Il tipo restituito di una funzione viene specificato con l'attributo Type dell'elemento ReturnType (FunctionImport).

Attributi applicabili

Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento ReturnType (FunctionImport).

Nome attributo Obbligatorio Valore
Tipo No Tipo restituito dalla funzione. Il valore deve essere una raccolta di ComplexType, EntityType o EDMSimpleType.
Entityset No Se la funzione restituisce una raccolta di tipi di entità, il valore di EntitySet deve essere il set di entità a cui appartiene la raccolta. In caso contrario, l'attributo EntitySet non deve essere utilizzato.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento ReturnType (FunctionImport). 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 utilizzata una funzione FunctionImport che restituisce libri e editori. Si noti che la funzione restituisce due set di risultati e pertanto vengono specificati due elementi ReturnType (FunctionImport).

 <FunctionImport Name="GetBooksAndPublishers">
   <ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
   <ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
 </FunctionImport>

 

 

Elemento RowType (CSDL)

Un elemento RowType nel linguaggio CSDL (Conceptual Schema Definition Language) definisce una struttura senza nome come parametro o tipo restituito per una funzione definita nel modello concettuale.

Un elemento RowType può essere figlio degli elementi seguenti:

  • CollectionType
  • Parametro
  • ReturnType (Function)

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

  • Proprietà (una o più)
  • Elementi annotazione (zero o più)

Attributi applicabili

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento RowType . 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 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="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

Elemento Schema (CSDL)

L'elemento Schema è l'elemento radice di una definizione di modello concettuale. Contiene definizioni per gli oggetti, le funzioni e i contenitori che costituiscono un modello concettuale.

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

  • Con
  • EntityContainer
  • EntityType
  • Enumtype
  • Associazione
  • ComplexType
  • Funzione

Un elemento Schema può contenere zero o un elemento Annotation.

Nota

L'elemento Function e gli elementi di annotazione sono consentiti solo in CSDL v2 e versioni successive.

 

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 concettuale. All'interno di uno spazio dei nomi due oggetti non possono avere lo stesso nome. Gli spazi dei nomi possono estendersi a più elementi dello schema e a più file con estensione csdl.

Uno spazio dei nomi del modello concettuale è diverso dallo spazio dei nomi XML dell'elemento Schema . Uno spazio dei nomi del modello concettuale (come definito dall'attributo Namespace ) è un contenitore logico per tipi di entità, tipi complessi e 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 (dove rispettivamente YYYY e MM rappresentano un anno e un mese) sono riservati per CSDL. 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
Spazio dei nomi Spazio dei nomi del modello concettuale. 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 Simple.Example.Model, il nome completo di EntityType è SimpleExampleModel.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 per l'attributo Namespace nell'elemento Schema SSDL.
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 Simple.Example.Model e il valore dell'attributo Alias è Model, è possibile usare Model.Customer come nome completo di EntityType.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento Schema . 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 Schema che contiene un elemento EntityContainer, due elementi EntityType e un elemento Association.

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
      xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
      xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
       Namespace="ExampleModel" Alias="Self">
         <EntityContainer Name="ExampleModelContainer">
           <EntitySet Name="Customers"
                      EntityType="ExampleModel.Customer" />
           <EntitySet Name="Orders" EntityType="ExampleModel.Order" />
           <AssociationSet
                       Name="CustomerOrder"
                       Association="ExampleModel.CustomerOrders">
             <End Role="Customer" EntitySet="Customers" />
             <End Role="Order" EntitySet="Orders" />
           </AssociationSet>
         </EntityContainer>
         <EntityType Name="Customer">
           <Key>
             <PropertyRef Name="CustomerId" />
           </Key>
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
           <Property Type="String" Name="Name" Nullable="false" />
           <NavigationProperty
                    Name="Orders"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Customer" ToRole="Order" />
         </EntityType>
         <EntityType Name="Order">
           <Key>
             <PropertyRef Name="OrderId" />
           </Key>
           <Property Type="Int32" Name="OrderId" Nullable="false" />
           <Property Type="Int32" Name="ProductId" Nullable="false" />
           <Property Type="Int32" Name="Quantity" Nullable="false" />
           <NavigationProperty
                    Name="Customer"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Order" ToRole="Customer" />
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
         </EntityType>
         <Association Name="CustomerOrders">
           <End Type="ExampleModel.Customer"
                Role="Customer" Multiplicity="1" />
           <End Type="ExampleModel.Order"
                Role="Order" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="Customer">
               <PropertyRef Name="CustomerId" />
             </Principal>
             <Dependent Role="Order">
               <PropertyRef Name="CustomerId" />
             </Dependent>
           </ReferentialConstraint>
         </Association>
       </Schema>

 

 

Elemento TypeRef (CSDL)

L'elemento TypeRef nel linguaggio CSDL (Conceptual Schema Definition Language) fornisce un riferimento a un tipo denominato esistente. L'elemento TypeRef può essere un elemento figlio dell'elemento CollectionType, utilizzato per specificare che una funzione ha una raccolta come parametro o tipo restituito.

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

  • Documentazione (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 TypeRef . Si noti che gli attributi DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode e Collation sono applicabili solo a EDMSimpleTypes.

Nome attributo Obbligatorio Valore
Tipo No Nome del tipo a cui si fa riferimento.
Ammette i valori Null No True (valore predefinito) o False, a seconda che la proprietà possa avere valore null.
[!NOTE]
> In CSDL v1 una proprietà di tipo complesso deve avere Nullable="False".
Defaultvalue No Valore predefinito della proprietà.
MaxLength No Lunghezza massima del valore della proprietà.
FixedLength No True o False a seconda che il valore della proprietà venga archiviato come stringa di lunghezza fissa.
Precisione No Precisione del valore della proprietà.
Ridimensiona No Scala del valore della proprietà.
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).
Unicode No True o False a seconda che il valore della proprietà venga archiviato come stringa Unicode.
Regole di confronto No Stringa che specifica la sequenza di collazione da utilizzare nell'origine dati.

 

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 CSDL. I nomi completi per due attributi personalizzati qualsiasi non possono essere uguali.

 

Esempio

Nell'esempio seguente viene illustrata una funzione definita dal modello che usa l'elemento TypeRef (come elemento figlio di un elemento CollectionType ) per specificare che la funzione accetta una raccolta di tipi di entità Department .

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Elemento Using (CSDL)

L'elemento Using nel linguaggio CSDL (Conceptual Schema Definition Language) importa il contenuto di un modello concettuale esistente in uno spazio dei nomi diverso. Impostando il valore dell'attributo Namespace , è possibile fare riferimento a tipi di entità, tipi complessi e tipi di associazione definiti in un altro modello concettuale. Più elementi Using possono essere figlio di un elemento Schema .

Nota

L'elemento Using in CSDL non funziona esattamente come un'istruzione using in un linguaggio di programmazione. Importando uno spazio dei nomi con un'istruzione using in un linguaggio di programmazione, non si influiscono sugli oggetti nello spazio dei nomi originale. In CSDL, uno spazio dei nomi importato può contenere un tipo di entità derivato da un tipo di entità nello spazio dei nomi originale. Ciò può influire sui set di entità dichiarati nello spazio dei nomi originale.

 

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

  • Documentazione (zero o uno elementi consentiti)
  • Elementi annotazione (zero o più elementi consentiti)

Attributi applicabili

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

Nome attributo Obbligatorio Valore
Spazio dei nomi Nome dello spazio dei nomi importato.
Alias Identificatore utilizzato al posto del nome dello spazio dei nomi. Anche se questo attributo è obbligatorio, non è necessario utilizzarlo al posto del nome dello spazio dei nomi per qualificare nomi di oggetti.

 

Nota

È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento Using . 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 Using utilizzato per importare uno spazio dei nomi definito altrove. Si noti che lo spazio dei nomi per l'elemento Schema visualizzato è BooksModel. La Address proprietà diPublisher EntityType è un tipo complesso definito nello spazio dei ExtendedBooksModel nomi (importato con l'elemento Using).

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
           xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
           xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
           Namespace="BooksModel" Alias="Self">

     <Using Namespace="BooksModel.Extended" Alias="BMExt" />

 <EntityContainer Name="BooksContainer" >
       <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
     </EntityContainer>

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BMExt.Address" Name="Address" Nullable="false" />
     </EntityType>

 </Schema>

 

 

Attributi di annotazione (CSDL)

Gli attributi di annotazione in Conceptual Schema Definition Language (CSDL) sono attributi XML personalizzati nel modello concettuale. Oltre ad avere una struttura XML valida, per gli attributi di annotazione hanno le caratteristiche seguenti:

  • Gli attributi di annotazione non devono trovarsi in spazi dei nomi XML riservati a CSDL.
  • È possibile applicare più attributi di annotazione a un determinato elemento CSDL.
  • I nomi completi di due attributi di annotazione non devono essere uguali.

Gli attributi di annotazione possono essere utilizzati per fornire metadati aggiuntivi sugli elementi in un modello concettuale. È 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

L'esempio seguente mostra un elemento EntityType con un attributo di annotazione (CustomAttribute). Nell'esempio viene inoltre mostrato un elemento di annotazione applicato all'elemento del tipo di entità.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

Il codice seguente recupera i metadati dell'attributo di annotazione e li scrive nella console:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

Nel codice riportato in precedenza si presuppone che il file School.csdl si trovi nella directory di output del progetto e che al progetto siano state aggiunte le istruzioni Imports e Using seguenti:

 using System.Data.Metadata.Edm;

 

 

Elementi di annotazione (CSDL)

Gli elementi Annotation in Conceptual Schema Definition Language (CSDL) sono elementi XML personalizzati nel modello concettuale. Oltre ad avere una struttura XML valida, gli elementi Annotation hanno le caratteristiche seguenti:

  • Gli elementi Annotation non devono trovarsi in spazi dei nomi XML riservati a CSDL.
  • Più elementi Annotation possono essere figli di un dato elemento CSDL.
  • 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 CSDL.

Gli elementi Annotation possono essere utilizzati per fornire metadati aggiuntivi sugli elementi in un modello concettuale. 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). Nell'esempio viene inoltre mostrato un attributo di annotazione applicato all'elemento del tipo di entità.

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

Il codice seguente recupera i metadati dell'elemento Annotation e li scrive nella console:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

Nel codice riportato in precedenza si presuppone che il file School.csdl si trovi nella directory di output del progetto e che al progetto siano state aggiunte le istruzioni Imports e Using seguenti:

 using System.Data.Metadata.Edm;

 

 

Tipi del modello concettuale (CSDL)

Il linguaggio CSDL (Conceptual Schema Definition Language) supporta un set di tipi di dati primitivi astratti, denominati EDMSimpleTypes, che definiscono le proprietà in un modello concettuale. EDMSimpleTypes sono proxy per i tipi di dati primitivi supportati nell'ambiente di archiviazione o hosting.

Nella tabella seguente vengono elencati i tipi di dati primitivi supportati da CSDL. La tabella elenca anche i facet che possono essere applicati a ogni EDMSimpleType.

EDMSimpleType Descrizione Facet applicabili
Edm.Binary Contiene dati binari. MaxLength, FixedLength, Nullable, Default
Edm.Boolean Contiene il valore true o false. Nullable, Default
Edm.Byte Contiene un Unsigned Integer a 8 bit. Precision, Nullable, Default
Edm.DateTime Rappresenta una data e un'ora. Precision, Nullable, Default
Edm.DateTimeOffset Contiene una data e un'ora come offset in minuti rispetto all'ora GMT. Precision, Nullable, Default
Edm.Decimal Contiene un valore numerico con scala e precisione fisse. Precision, Nullable, Default
Edm.Double Contiene un numero a virgola mobile con precisione a 15 cifre Precision, Nullable, Default
Edm.Float Contiene un numero a virgola mobile con precisione a 7 cifre. Precision, Nullable, Default
Edm.Guid Contiene un identificatore univoco a 16 byte. Precision, Nullable, Default
Edm.Int16 Contiene un Signed Integer a 16 bit. Precision, Nullable, Default
Edm.Int32 Contiene un Signed Integer a 32 bit. Precision, Nullable, Default
Edm.Int64 Contiene un Signed Integer a 64 bit. Precision, Nullable, Default
Edm.SByte Contiene un Signed Integer a 8 bit. Precision, Nullable, Default
Edm.String Contiene dati di tipo carattere. Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default
Edm.Time Contiene un'ora del giorno. Precision, Nullable, Default
Edm.Geography Nullable, Default, SRID
Edm.GeographyPoint Nullable, Default, SRID
Edm.GeographyLineString Nullable, Default, SRID
Edm.GeographyPolygon Nullable, Default, SRID
Edm.GeographyMultiPoint Nullable, Default, SRID
Edm.GeographyMultiLineString Nullable, Default, SRID
Edm.GeographyMultiPolygon Nullable, Default, SRID
Edm.GeographyCollection Nullable, Default, SRID
Edm.Geometry Nullable, Default, SRID
Edm.GeometryPoint Nullable, Default, SRID
Edm.GeometryLineString Nullable, Default, SRID
Edm.GeometryPolygon Nullable, Default, SRID
Edm.GeometryMultiPoint Nullable, Default, SRID
Edm.GeometryMultiLineString Nullable, Default, SRID
Edm.GeometryMultiPolygon Nullable, Default, SRID
Edm.GeometryCollection Nullable, Default, SRID

Facet (CSDL)

I facet in Conceptual Schema Definition Language (CSDL) rappresentano vincoli sulle proprietà di tipi di entità e di tipi complessi. I facet appaiono come attributi XML negli elementi CSDL seguenti:

  • Proprietà
  • TypeRef
  • Parametro

Nella tabella seguente vengono descritti i facet supportati in CSDL. Tutti i facet sono facoltativi. Alcuni facet elencati di seguito vengono usati da Entity Framework durante la generazione di un database da un modello concettuale.

Nota

Per informazioni sui tipi di dati in un modello concettuale, vedere Conceptual Model Types (CSDL).

Facet Descrizione Si applica a Utilizzato per la generazione di database. Utilizzato dal runtime
Regole di confronto Specifica la sequenza di ordinamento da usare quando si eseguono operazioni di confronto e di ordinamento su valori della proprietà. Edm.String No
Concurrencymode Indica che il valore della proprietà deve essere usato per le verifiche della concorrenza ottimistica. Tutte le proprietà EDMSimpleType No
Predefinita Specifica il valore predefinito della proprietà se durante la creazione di istanze non viene fornito alcun valore. Tutte le proprietà EDMSimpleType
FixedLength Specifica se la lunghezza del valore della proprietà può variare. Edm.Binary, Edm.String No
MaxLength Specifica la lunghezza massima del valore della proprietà. Edm.Binary, Edm.String No
Ammette i valori Null Specifica se la proprietà può avere un valore Null . Tutte le proprietà EDMSimpleType
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 proprietà. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time No
Ridimensiona Specifica il numero di cifre a destra del separatore decimale per il valore della proprietà. Edm.Decimal No
SRID Specifica l'ID sistema di riferimento del sistema spaziale. Per altre informazioni, vedere SRID e SRID (SQL Server). Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection No
Unicode Viene indicato se il valore della proprietà viene archiviato come Unicode. Edm.String

Nota

Quando si genera un database da un modello concettuale, la Creazione guidata database riconoscerà il valore dell'attributo StoreGeneratedPattern su un elemento Property se si trova nello spazio dei nomi seguente: https://schemas.microsoft.com/ado/2009/02/edm/annotation. I valori supportati per l'attributo sono Identity e Computed. Un valore Identity genererà una colonna di database con un valore Identity generato nel database. Il valore Computed produrrà una colonna con un valore calcolato nel database.

Esempio

Nell'esempio seguente vengono mostrati i facet applicati alle proprietà di un tipo di entità:

 <EntityType Name="Product">
   <Key>
     <PropertyRef Name="ProductId" />
   </Key>
   <Property Type="Int32"
             Name="ProductId" Nullable="false"
             a:StoreGeneratedPattern="Identity"
    xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
   <Property Type="String"
             Name="ProductName"
             Nullable="false"
             MaxLength="50" />
   <Property Type="String"
             Name="Location"
             Nullable="true"
             MaxLength="25" />
 </EntityType>