Entity Framework - obsługa wyliczenia

W Entity Framework ta funkcja umożliwia zdefiniowanie właściwości w klasie domeny, która jest typem wyliczenia, i zamapowanie jej na kolumnę bazy danych typu całkowitego. Entity Framework następnie skonwertuje wartość bazy danych do iz odpowiedniego wyliczenia podczas wykonywania zapytań i zapisywania danych.

  • Typy wyliczeniowe mają wiele zalet podczas pracy z właściwościami, które mają stałą liczbę odpowiedzi.

  • Podczas korzystania z wyliczeń wzrasta zarówno bezpieczeństwo, jak i niezawodność aplikacji.

  • Wyliczenie znacznie utrudnia użytkownikowi popełnienie błędów, a problemy, takie jak ataki iniekcyjne, nie istnieją.

  • W Entity Framework wyliczenie może mieć następujące typy bazowe -

    • Byte
    • Int16
    • Int32
    • Int64
    • SByte
  • Domyślnym typem podstawowym elementów wyliczenia jest int.

  • Domyślnie pierwszy moduł wyliczający ma wartość 0, a wartość każdego kolejnego modułu wyliczającego jest zwiększana o 1.

Spójrzmy na poniższy przykład, w którym utworzymy jednostkę w projektancie, a następnie dodamy kilka właściwości.

Step 1 - Utwórz nowy projekt z menu Plik → Nowy → Projekt.

Step 2 - W lewym okienku wybierz aplikację konsoli.

Step 3 - Wpisz EFEnumDemo jako nazwę projektu i kliknij OK.

Step 4 - Kliknij prawym przyciskiem myszy nazwę projektu w Eksploratorze rozwiązań i wybierz opcję menu Dodaj → Nowy element.

Step 5 - Wybierz Entity Data Model ADO.NET w okienku Szablony.

Step 6 - Wprowadź EFEnumModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj.

Step 7 - Na stronie Entity Data Model Wizard wybierz opcję Empty EF Designer Model.

Step 8 - Kliknij Zakończ

Step 9 - Następnie kliknij prawym przyciskiem myszy okno projektanta i wybierz Dodaj → Jednostka.

Pojawi się okno dialogowe New Entity, jak pokazano na poniższej ilustracji.

Step 10 - Wprowadź Dział jako nazwę jednostki i DeptID jako nazwę właściwości, pozostaw Typ właściwości jako Int32 i kliknij OK.

Step 11 - Kliknij prawym przyciskiem obiekt i wybierz Dodaj nowy → Właściwość skalarna.

Step 12 - Zmień nazwę nowej właściwości na DeptName.

Step 13 - Zmień typ nowej właściwości na Int32 (domyślnie nowa właściwość jest typu String).

Step 14 - Aby zmienić typ, otwórz okno Właściwości i zmień właściwość Type na Int32.

Step 15 - W Entity Framework Designer kliknij prawym przyciskiem myszy właściwość Name, wybierz Convert to enum.

Step 16 - W oknie dialogowym Dodawanie typu wyliczenia wprowadź DepartmentNames w polu Nazwa typu wyliczenia, zmień typ bazowy na Int32, a następnie dodaj następujące elementy do typu: fizyka, chemia, komputer i ekonomia.

Step 17 - Kliknij OK.

Jeśli przełączysz się do okna przeglądarki modelu, zobaczysz, że typ został również dodany do węzła Typy wyliczeń.

Wygenerujmy bazę danych z modelu, wykonując wszystkie kroki opisane w rozdziale Podejście Model First.

Step 1 - Kliknij prawym przyciskiem myszy powierzchnię Entity Designer i wybierz opcję Generuj bazę danych z modelu.

Zostanie wyświetlone okno dialogowe Wybierz połączenie danych Kreatora generowania bazy danych.

Step 2 - Kliknij przycisk Nowe połączenie.

Step 3 - Wprowadź nazwę serwera i EnumDemo dla bazy danych i kliknij OK.

Step 4 - Pojawi się okno dialogowe z pytaniem, czy chcesz utworzyć nową bazę danych, kliknij Tak.

Step 5- Kliknij Dalej, a Kreator tworzenia bazy danych wygeneruje język definicji danych (DDL) do tworzenia bazy danych. Teraz kliknij Zakończ.

Step 6 - Kliknij prawym przyciskiem myszy Edytor T-SQL i wybierz Wykonaj.

Step 7 - Aby wyświetlić wygenerowany schemat, kliknij prawym przyciskiem myszy nazwę bazy danych w Eksploratorze obiektów SQL Server i wybierz opcję Odśwież.

W bazie danych zobaczysz tabelę Departments.

Spójrzmy na następujący przykład, w którym niektóre nowe obiekty działu są dodawane i zapisywane. A potem odzyskaj dział informatyki.

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();
      }
   }
}

Po wykonaniu powyższego kodu otrzymasz następujący wynik -

Department ID: 2, Department Name: Computer

Zalecamy wykonanie powyższego przykładu krok po kroku w celu lepszego zrozumienia.