Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Entity Data Model (EDM) usa tre concetti chiave per descrivere la struttura dei dati: tipo di entità, tipo di associazione e proprietà. Questi sono i concetti più importanti nella descrizione della struttura dei dati in qualsiasi implementazione dell'EDM.
Tipo di entità
Il tipo di entità è il blocco predefinito fondamentale per descrivere la struttura dei dati con Entity Data Model. In un modello concettuale, i tipi di entità vengono costruiti dalle proprietà e descrivono la struttura dei concetti di primo livello, ad esempio clienti e ordini in un'applicazione aziendale. Allo stesso modo in cui una definizione di classe in un programma computer è un modello per le istanze della classe , un tipo di entità è un modello per le entità. Un'entità rappresenta un oggetto specifico, ad esempio un cliente o un ordine specifico. Ogni entità deve avere una chiave di entità univoca all'interno di un set di entità. Un set di entità è una raccolta di istanze di un tipo di entità specifico. I set di entità (e i set di associazioni) vengono raggruppati logicamente in un contenitore di entità.
L'ereditarietà è supportata con i tipi di entità, ovvero un tipo di entità può essere derivato da un altro. Per altre informazioni, vedere Entity Data Model: Ereditarietà.
Tipo di associazione
Un tipo di associazione (detto anche associazione) è il blocco predefinito fondamentale per descrivere le relazioni nel modello di dati di entità. In un modello concettuale, un'associazione rappresenta una relazione tra due tipi di entità, ad esempio Customer e Order. Ogni associazione ha due estremità di associazione che specificano i tipi di entità coinvolti nell'associazione. Ogni fine dell'associazione specifica anche una molteplicità finale dell'associazione che indica il numero di entità che possono trovarsi alla fine dell'associazione. Una molteplicità finale di associazione può avere un valore pari a uno (1), zero o uno (0,.1) o molti (*). È possibile accedere alle entità all'estremità di un'associazione tramite proprietà di navigazione o tramite chiavi esterne se esposte su un tipo di entità. Per altre informazioni, vedere proprietà di chiave esterna.
In un'applicazione un'istanza di un'associazione rappresenta un'associazione specifica, ad esempio un'associazione tra un'istanza di Customer e istanze di Order. Le istanze di associazione vengono raggruppate logicamente in un set di associazioni. I set di associazioni (e i set di entità) vengono raggruppati logicamente in un contenitore di entità.
Proprietà
I tipi di entità contengono proprietà che definiscono la struttura e le caratteristiche. Ad esempio, un tipo di entità Customer può avere proprietà quali CustomerId, Name e Address.
Le proprietà in un modello concettuale sono analoghe alle proprietà definite in una classe in un programma computer. Allo stesso modo in cui le proprietà di una classe definiscono la forma della classe e contengono informazioni sugli oggetti, le proprietà in un modello concettuale definiscono la forma di un tipo di entità e contengono informazioni sulle istanze del tipo di entità.
Una proprietà può contenere dati primitivi, ad esempio una stringa, un numero intero o un valore booleano, o dati strutturati ,ad esempio un tipo complesso. Per ulteriori informazioni, vedere Modello di Dati dell'Entità: Tipi di Dati Primitivi.
Rappresentazioni di un modello concettuale
Un modello concettuale è una rappresentazione specifica della struttura di alcuni dati come entità e relazioni. Un modo per rappresentare un modello concettuale è costituito da un diagramma. Il diagramma seguente rappresenta un modello concettuale con tre tipi di entità (Book
, Publisher
e Author
) e due associazioni (PublishedBy
e WrittenBy
):
Questa rappresentazione, tuttavia, presenta alcune carenze quando si tratta di comunicare alcuni dettagli sul modello. Ad esempio, le informazioni sul tipo di proprietà e sul set di entità non vengono trasmesse nel diagramma. La ricchezza di un modello concettuale può essere trasmessa più chiaramente con un linguaggio specifico del dominio (DSL). Il ADO.NET Entity Framework usa un linguaggio DSL basato su XML denominato CSDL (Conceptual Schema Definition Language) per definire modelli concettuali. Di seguito è riportata la definizione CSDL del modello concettuale nel diagramma precedente:
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<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>
<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>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
<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>
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
</Association>
<Association Name="WrittenBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
</Association>
</Schema>