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.