Specifica CSDL
Nota
CSDL v1 non è supportato. Eseguire l'aggiornamento alla versione 3
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 utilizzati da Entity Framework per eseguire il mapping di entità e relazioni definite in un modello concettuale a un'origine dati. Per maggiori informazioni, vedere la Specifica SSDL e la la specifica MSL.
CSDL è l'implementazione di Entity Framework dell’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, EF Designer usa le informazioni in un file .edmx per creare il file .csdl necessario per Entity Framework in fase di esecuzione
Le versioni di CSDL si differenziano tra loro per gli spazi dei nomi XML.
Versione dell'CSDL | XML Namespace |
---|---|
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'entità finale dell'associazione può disporre di 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ò includere i seguenti elementi figlio (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 | Sì | 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 Multiplicity per ciascuna Entità finale dell'associazione indica 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 non 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ò includere i seguenti elementi figlio (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 figlio Entità finale.
Attributi applicabili
La tabella seguente descrive gli attributi che possono essere applicati all'elemento AssociationSet.
Nome attributo | Obbligatorio | valore |
---|---|---|
Nome | Sì | Nome del set di entità. Il valore dell'attributo Name non può essere uguale al valore dell'attributo Association . |
Associazione | Sì | 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
La tabella seguente descrive gli attributi che possono essere applicati 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 |
---|---|---|
Type | 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 maggiori informazioni, vedere SRID and 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 >= 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 far parte di associazioni. Nessuna delle estremità di un'associazione può essere un tipo complesso e pertanto non è possibile definire le proprietà di navigazione per i 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ò includere i seguenti elementi figlio (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 | Sì | 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. | ||
Abstract | 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à su 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à (Publisher):
<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 ReferentialConstraint definisce una funzionalità simile a un vincolo di integrità referenziale in un database relazionale. Allo stesso modo in cui una colonna (o colonne) di 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ò/possono fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità al quale è fatto riferimento viene chiamato l'entità finale principale del vincolo. Il tipo di entità che fa riferimento all'estremità principale viene chiamato l'entità finale dipendente del vincolo. Gli elementi PropertyRef vengono utilizzati per specificare quali chiavi fanno riferimento alla fine dell'entità.
L'elemento Dependent può includere i seguenti elementi figlio (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 | Sì | 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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Summary: breve descrizione dell'elemento padre. Zero o un elemento.
- LongDescription: descrizione completa dell'elemento padre. Zero o un elemento.
- Elementi di 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à su un'estremità di un'associazione e il numero di istanze del tipo di entità che possono esistere a tale estremità 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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o un elemento)
- OnDelete (zero o un elemento)
- Elementi annotazione (zero o più elementi)
Attributi applicabili
Nella tabella seguente vengono descritti gli attributi che possono essere applicati all'elemento End quando è figlio di un elemento Association .
Nome attributo | Obbligatorio | Valore |
---|---|---|
Type | Sì | 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à | Sì | 1, 0..1 o * a seconda del numero di istanze del tipo di entità che possono trovarsi alla fine dell'associazione. 1 indica che nell'entità finale dell'associazione è presente esattamente un'istanza del tipo di entità. 0..1 indica che nell'entità finale dell'associazione sono presenti zero o una istanza del tipo di entità. * indica che nell'entità finale dell'associazione sono presenti zero, una o più istanze del tipo 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
Nell'esempio seguente viene illustrato un elemento Association che definisce l'associazione CustomerOrders . I valori Multiplicity per ciascuna Entità finale dell'associazione indica 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" />
<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ò includere i seguenti elementi figlio (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 Association .
Nome attributo | Obbligatorio | Valore |
---|---|---|
EntitySet | Sì | 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, questo 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 | Sì | Nome del contenitore di entità. |
Extends | 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 per le 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ò includere i seguenti elementi figlio (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 | Sì | Nome del set di entità. |
EntityType | Sì | 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). Il seguente esempio 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)
In un modello concettuale, l'elemento EntityType rappresenta la struttura di concetti di livello superiore, quale ad esempio clienti o ordini. 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)
- Le proprietà di navigazione che consentono la navigazione da un’entità finale di un’associazione all'altra estremità. (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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o un elemento)
- Key (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 | Sì | 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à aperta. [!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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o un elemento)
- Member (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 | Sì | 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 degli elementi dell'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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o un elemento)
- Parameter (zero o più elementi)
- DefiningExpression (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 | Sì | 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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o uno elementi consentiti)
- Parameter (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 | Sì | Nome della funzione importata. |
ReturnType | No | Tipo restituito dalla funzione. Non utilizzare questo attributo se la funzione non restituisce un valore. Altrimenti, 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 EntitySet deve corrispondere al set di entità a cui la raccolta appartiene. 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 valida scelta per la chiave di entità perché un codice 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'utilizzo di Name e Address per la chiave di entità è una scelta ragionevole, perché è improbabile che due autori con lo stesso nome vivano allo 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 consente di 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 | Sì | Nome del membro. |
Valore | No | Valore del membro. Per impostazione predefinita, il primo membro ha un 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>
Elemento NavigationProperty (CSDL)
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 esista una proprietà di navigazione, OrdersNavProp, in un tipo di entità Customer e che navighi in un'associazione one-to-one tra Customer e Order. Poiché l'estremità dell'associazione remota per la proprietà di navigazione ha multiplicity many (*), il tipo di dati è una raccolta (di Order). Analogamente, se esiste una proprietà di navigazione CustomerNavProp, nel tipo di entità Order, il relativo tipo di dati sarebbe Customer perché la molteplicità dell'entità finale remota è uno (1).
Un elemento NavigationProperty può includere i seguenti elementi figlio (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 | Sì | Nome della proprietà di navigazione. |
Relazione | Sì | Nome di un'associazione che è all'interno dell'ambito del modello. |
ToRole | Sì | 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 | Sì | 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ò includere i seguenti elementi figlio (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 | Sì | Cascata o Nessuna. Se Cascade, i tipi di entità dipendenti verranno eliminati quando viene eliminato il tipo di entità principale. Se None, 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 . 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>
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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (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 Parameter.
Nome attributo | Obbligatorio | valore |
---|---|---|
Nome | Sì | Nome del parametro. |
Type | Sì | 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, di output o di 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 maggiori informazioni, vedere SRID e SRID (SQL Server) |
Nota
È possibile applicare qualsiasi numero di attributi di annotazione (attributi XML personalizzati) all'elemento Parameter. Tuttavia, gli attributi personalizzati non possono appartenere ad alcuno spazio dei nomi XML riservato a 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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Documentation (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
La tabella seguente descrive gli attributi che possono essere applicati all'elemento Parameter.
Nome attributo | Obbligatorio | valore |
---|---|---|
Nome | Sì | Nome del parametro. |
Type | No | Tipo di parametro. Un parametro può essere uno qualsiasi dei seguenti tipi (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 maggiori 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
L'esempio seguente mostra un elemento Function che utilizza 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 l'entità finale principale di un vincolo referenziale. Un elemento ReferentialConstraint definisce una funzionalità simile a un vincolo di integrità referenziale in un database relazionale. Allo stesso modo in cui una colonna (o colonne) di 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ò/possono fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità al quale è fatto riferimento viene chiamato l'entità finale principale del vincolo. Il tipo di entità che fa riferimento all'estremità principale viene chiamato l'entità finale dipendente del vincolo. Gli elementi PropertyRef vengono utilizzati per specificare quali chiavi fanno riferimento alla fine dipendente.
L'elemento Principal può includere i seguenti elementi figlio (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 | Sì | 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 utilizzato come 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 degli 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ò includere i seguenti elementi figlio (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
La tabella seguente descrive gli attributi che possono essere applicati all'elemento Property.
Nome attributo | Obbligatorio | valore |
---|---|---|
Nome | Sì | Nome della proprietà. |
Type | Sì | 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 maggiori 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 Property (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
La tabella seguente descrive gli attributi che possono essere applicati all'elemento Property.
Nome attributo | Obbligatorio | valore |
---|---|---|
Nome | Sì | Nome della proprietà. |
Type | Sì | 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 maggiori 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 >= 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 | Sì | 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ò includere i seguenti elementi figlio (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 |
---|---|---|
Type | Sì | 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
L'esempio seguente mostra l'elemento ReferenceType usato come figlio dei un elementoParameter 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 figlio dei un elementoReturnType (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. Allo stesso modo in cui una colonna (o colonne) di 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ò/possono fare riferimento alla chiave di entità di un altro tipo di entità. Il tipo di entità al quale è fatto riferimento viene chiamato l'entità finale principale del vincolo. Il tipo di entità che fa riferimento all'estremità principale viene chiamato l'entità finale 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 ReferentialConstraint può includere i seguenti elementi figlio (nell'ordine elencato):
- Documentazione (zero o un elemento)
- Principal (esattamente un elemento)
- Dependent (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 di qualsiasi EdmSimpleTypetipo di entità, tipo complesso, tipo di riga o tipo di riferimento 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
La tabella seguente descrive gli attributi che possono essere applicati 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
La tabella seguente descrive gli attributi che possono essere applicati all'elemento ReturnType (FunctionImport).
Nome attributo | Obbligatorio | Valore |
---|---|---|
Type | 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 EntitySet deve corrispondere al set di entità a cui la raccolta appartiene. 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
L'esempio seguente usa FunctionImport, che restituisce libri ed 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ò includere i seguenti elementi figlio (nell'ordine elencato):
- Property (uno o più)
- Elementi Annotation (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 >= 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:
- Se si usa
- 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 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 possono essere applicati all'elemento Schema.
Nome attributo | Obbligatorio | Valore |
---|---|---|
Spazio dei nomi | Sì | 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
L'esempio seguente mostra 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ò includere i seguenti elementi figlio (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 TypeRef. Si noti che gli attributi DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode e Collation sono applicabili solo alle raccolte di EDMSimpleTypes.
Nome attributo | Obbligatorio | Valore |
---|---|---|
Type | 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 maggiori 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 possono essere applicati all'elemento Using.
Nome attributo | Obbligatorio | Valore |
---|---|---|
Spazio dei nomi | Sì | Nome dello spazio dei nomi importato. |
Alias | Sì | 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 proprietà Address
in Publisher
EntityType è un tipo complesso definito nel nome degli spazi ExtendedBooksModel
(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. Nella tabella sono inoltre elencati 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 | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyPoint | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyLineString | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyPolygon | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyMultiPoint | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyMultiLineString | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyMultiPolygon | Che ammette valori Null, predefinito, SRID | |
Edm.GeographyCollection | Che ammette valori Null, predefinito, SRID | |
Edm.Geometry | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryPoint | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryLineString | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryPolygon | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryMultiPoint | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryMultiLineString | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryMultiPolygon | Che ammette valori Null, predefinito, SRID | |
Edm.GeometryCollection | Che ammette valori Null, predefinito, 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 Tipi di modello concettuale (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 | Sì | No |
ConcurrencyMode | Indica che il valore della proprietà deve essere usato per le verifiche della concorrenza ottimistica. | Tutte le proprietà EDMSimpleType | No | Sì |
Predefinita | Specifica il valore predefinito della proprietà se durante la creazione di istanze non viene fornito alcun valore. | Tutte le proprietà EDMSimpleType | Sì | Sì |
FixedLength | Specifica se la lunghezza del valore della proprietà può variare. | Edm.Binary, Edm.String | Sì | No |
MaxLength | Specifica la lunghezza massima del valore della proprietà. | Edm.Binary, Edm.String | Sì | No |
Ammette i valori Null | Specifica se la proprietà può avere un valore null. | Tutte le proprietà EDMSimpleType | Sì | Sì |
Precisione | Per le proprietà di tipo Decimal specifica il numero di cifre che un valore della proprietà può avere. Per le proprietà di tipo Time, DateTime e DateTimeOffset, specifica il numero di cifre per la parte frazionaria di secondi del valore della proprietà. | Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time | Sì | No |
Ridimensiona | Specifica il numero di cifre a destra del separatore decimale per il valore della proprietà. | Edm.Decimal | Sì | No |
SRID | Specifica l'ID sistema di riferimento del sistema spaziale. Per maggiori 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 | Sì |
Unicode | Viene indicato se il valore della proprietà viene archiviato come Unicode. | Edm.String | Sì | Sì |
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>