Entity Framework - Modello di dati
Entity Data Model (EDM) è una versione estesa del modello Entity-Relationship che specifica il modello concettuale dei dati utilizzando varie tecniche di modellazione. Si riferisce anche a una serie di concetti che descrivono la struttura dei dati, indipendentemente dalla sua forma memorizzata.
EDM supporta una serie di tipi di dati primitivi che definiscono le proprietà in un modello concettuale. Dobbiamo considerare 3 parti fondamentali che costituiscono la base per Entity Framework e collettivamente è noto come Entity Data Model. Di seguito sono riportate le tre parti fondamentali di EDM.
- Il modello dello schema di archiviazione
- Il modello concettuale
- Il modello di mappatura
Il modello dello schema di archiviazione
Il modello di archiviazione, chiamato anche SSDL (Storage Schema Definition Layer), rappresenta la rappresentazione schematica dell'archivio dati back-end.
Il modello concettuale
Il modello concettuale chiamato anche come CSDL (Conceptual Schema Definition Layer) è il modello di entità reale, rispetto al quale scriviamo le nostre query.
Il modello di mappatura
Mapping Layer è solo una mappatura tra il modello concettuale e il modello di archiviazione.
Lo schema logico e la sua mappatura con lo schema fisico sono rappresentati come un EDM.
Visual Studio fornisce anche Entity Designer, per la creazione visiva dell'EDM e della specifica di mapping.
L'output dello strumento è il file XML (* .edmx) che specifica lo schema e la mappatura.
Il file Edmx contiene artefatti di metadati di Entity Framework.
Linguaggio di definizione dello schema
ADO.NET Entity Framework utilizza un linguaggio di definizione dei dati basato su XML chiamato Schema Definition Language (SDL) per definire lo schema EDM.
L'SDL definisce i tipi semplici simili ad altri tipi primitivi, tra cui String, Int32, Double, Decimal e DateTime, tra gli altri.
Anche un'enumerazione, che definisce una mappa di valori e nomi primitivi, è considerata un tipo semplice.
Le enumerazioni sono supportate solo dalla versione del framework 5.0 in poi.
I tipi complessi vengono creati da un'aggregazione di altri tipi. Una raccolta di proprietà di questi tipi definisce un tipo di entità.
Il modello di dati ha principalmente tre concetti chiave per descrivere la struttura dei dati:
- Tipo di entità
- Tipo di associazione
- Property
Tipo di entità
Il tipo di entità è l'elemento costitutivo fondamentale per descrivere la struttura dei dati in EDM.
In un modello concettuale, i tipi di entità sono costruiti dalle proprietà e descrivono la struttura dei concetti di primo livello, come Studenti e Iscrizioni in un'applicazione aziendale.
Un'entità rappresenta un oggetto specifico come uno studente o un'iscrizione specifici.
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 associazione) sono 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.
Tipo di associazione
È un altro elemento fondamentale per la descrizione delle relazioni in EDM. In un modello concettuale, un'associazione rappresenta una relazione tra due tipi di entità come Student e Enrollment.
Ogni associazione ha due estremità di associazione che specificano i tipi di entità coinvolti nell'associazione.
Ogni fine associazione specifica anche una molteplicità di fine associazione che indica il numero di entità che possono trovarsi a quell'estremità dell'associazione.
Una molteplicità di fine associazione può avere un valore di uno (1), zero o uno (0..1) o molti (*).
È possibile accedere alle entità a un'estremità di un'associazione tramite le proprietà di navigazione o tramite chiavi esterne se sono esposte su un tipo di entità.
Proprietà
I tipi di entità contengono proprietà che ne definiscono la struttura e le caratteristiche. Ad esempio, un tipo di entità Studente può avere proprietà come ID studente, nome ecc.
Una proprietà può contenere dati primitivi (come una stringa, un numero intero o un valore booleano) o dati strutturati (come un tipo complesso).