Entity Framework - Supporto Enum
In Entity Framework, questa funzionalità consentirà di definire una proprietà su una classe di dominio che è un tipo enum e mapparla a una colonna di database di un tipo intero. Entity Framework convertirà quindi il valore del database in e dall'enumerazione pertinente durante la query e il salvataggio dei dati.
I tipi enumerati offrono tutti i tipi di vantaggi quando si lavora con proprietà che hanno un numero fisso di risposte.
La sicurezza e l'affidabilità di un'applicazione aumentano entrambe quando si utilizzano le enumerazioni.
L'enumerazione rende molto più difficile per l'utente commettere errori e problemi come gli attacchi di iniezione sono inesistenti.
In Entity Framework, un'enumerazione può avere i seguenti tipi sottostanti:
- Byte
- Int16
- Int32
- Int64
- SByte
Il tipo sottostante predefinito degli elementi di enumerazione è int.
Per impostazione predefinita, il primo enumeratore ha il valore 0 e il valore di ogni enumeratore successivo viene aumentato di 1.
Diamo un'occhiata al seguente esempio in cui creeremo un'entità in designer e poi aggiungeremo alcune proprietà.
Step 1 - Crea nuovo progetto da File → Nuovo → opzione di menu Progetto.
Step 2 - Nel riquadro di sinistra, seleziona l'applicazione Console.
Step 3 - Immettere EFEnumDemo come nome del progetto e fare clic su OK.
Step 4 - Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni e selezionare l'opzione di menu Aggiungi → Nuovo elemento.
Step 5 - Seleziona ADO.NET Entity Data Model nel riquadro Modelli.
Step 6 - Immettere EFEnumModel.edmx per il nome del file, quindi fare clic su Aggiungi.
Step 7 - Nella pagina Creazione guidata modello di dati entità, selezionare Modello di progettazione EF vuoto.
Step 8 - Fare clic su Fine
Step 9 - Quindi fare clic con il pulsante destro del mouse sulla finestra di progettazione e selezionare Aggiungi → Entità.
La finestra di dialogo Nuova entità viene visualizzata come mostrato nell'immagine seguente.
Step 10 - Immettere Department come nome entità e DeptID come nome proprietà, lasciare il tipo di proprietà su Int32 e fare clic su OK.
Step 11 - Fare clic con il pulsante destro del mouse sull'entità e selezionare Aggiungi nuovo → Proprietà scalare.
Step 12 - Rinomina la nuova proprietà in DeptName.
Step 13 - Modificare il tipo della nuova proprietà in Int32 (per impostazione predefinita, la nuova proprietà è di tipo String).
Step 14 - Per modificare il tipo, aprire la finestra Proprietà e modificare la proprietà Type in Int32.
Step 15 - In Entity Framework Designer, fare clic con il pulsante destro del mouse sulla proprietà Name, selezionare Converti in enumerazione.
Step 16 - Nella finestra di dialogo Aggiungi tipo di enumerazione, immettere DepartmentNames per Enum Type Name, modificare il tipo sottostante in Int32, quindi aggiungere i seguenti membri al tipo: Physics, Chemistry, Computer ed Economics.
Step 17 - Fare clic su Ok.
Se passi alla finestra Browser modello, vedrai che il tipo è stato aggiunto anche al nodo Tipi enumerazione.
Generiamo il database dal modello seguendo tutti i passaggi menzionati nel capitolo sull'approccio Model First.
Step 1 - Fare clic con il pulsante destro del mouse sulla superficie Entity Designer e selezionare Genera database da modello.
Viene visualizzata la finestra di dialogo Scegli la connessione dati della Creazione guidata database.
Step 2 - Fare clic sul pulsante Nuova connessione.
Step 3 - Immettere il nome del server e EnumDemo per il database e fare clic su OK.
Step 4 - Verrà visualizzata una finestra di dialogo che chiede se si desidera creare un nuovo database, fare clic su Sì.
Step 5- Fare clic su Avanti e la Creazione guidata database genererà il linguaggio di definizione dei dati (DDL) per la creazione di un database. Ora fai clic su Fine.
Step 6 - Fare clic con il pulsante destro del mouse su T-SQL Editor e selezionare Esegui.
Step 7 - Per visualizzare lo schema generato, fare clic con il pulsante destro del mouse sul nome del database in Esplora oggetti di SQL Server e selezionare Aggiorna.
Vedrai la tabella Dipartimenti nel database.
Diamo un'occhiata al seguente esempio in cui vengono aggiunti e salvati alcuni nuovi oggetti Department al contesto. E poi recupera il reparto Computer.
class Program {
static void Main(string[] args) {
using (var context = new EFEnumModelContainer()) {
context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});
context.SaveChanges();
var department = (
from d in context.Departments
where d.DeptName == DepartmentNames.Computer
select d
).FirstOrDefault();
Console.WriteLine(
"Department ID: {0}, Department Name: {1}",
department.DeptID, department.DeptName
);
Console.ReadKey();
}
}
}
Quando il codice sopra viene eseguito, riceverai il seguente output:
Department ID: 2, Department Name: Computer
Si consiglia di eseguire l'esempio precedente in modo graduale per una migliore comprensione.