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.