Entity Framework - поддержка Enum
В Entity Framework эта функция позволит вам определить свойство в классе домена, которое является типом перечисления, и сопоставить его со столбцом базы данных целочисленного типа. Entity Framework затем преобразует значение базы данных в соответствующее перечисление и обратно при запросе и сохранении данных.
Перечислимые типы обладают всеми преимуществами при работе со свойствами, имеющими фиксированное количество ответов.
При использовании перечислений повышаются безопасность и надежность приложения.
Перечисление значительно усложняет пользователю возможность совершать ошибки, а такие проблемы, как атаки с использованием инъекций, отсутствуют.
В Entity Framework перечисление может иметь следующие базовые типы:
- Byte
- Int16
- Int32
- Int64
- SByte
Базовым типом элементов перечисления по умолчанию является int.
По умолчанию первый перечислитель имеет значение 0, а значение каждого последующего перечислителя увеличивается на 1.
Давайте посмотрим на следующий пример, в котором мы будем создавать сущность в конструкторе, а затем добавим некоторые свойства.
Step 1 - Создайте новый проект в меню Файл → Новый → Проект.
Step 2 - На левой панели выберите консольное приложение.
Step 3 - Введите EFEnumDemo в качестве имени проекта и нажмите OK.
Step 4 - Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите пункт меню «Добавить» → «Новый элемент».
Step 5 - Выберите модель данных сущности ADO.NET на панели шаблонов.
Step 6 - Введите EFEnumModel.edmx в качестве имени файла и нажмите «Добавить».
Step 7 - На странице мастера модели данных сущности выберите Пустая модель конструктора EF.
Step 8 - Нажмите Готово.
Step 9 - Затем щелкните правой кнопкой мыши окно дизайнера и выберите Добавить → Сущность.
Появится диалоговое окно New Entity, как показано на следующем изображении.
Step 10 - Введите «Отдел» в качестве имени объекта и DeptID в качестве имени свойства, оставьте тип свойства как Int32 и нажмите «ОК».
Step 11 - Щелкните объект правой кнопкой мыши и выберите Добавить новое → Скалярное свойство.
Step 12 - Переименуйте новое свойство в DeptName.
Step 13 - Измените тип нового свойства на Int32 (по умолчанию новое свойство имеет тип String).
Step 14 - Чтобы изменить тип, откройте окно «Свойства» и измените свойство «Тип» на Int32.
Step 15 - В Entity Framework Designer щелкните правой кнопкой мыши свойство Name и выберите Convert to enum.
Step 16 - В диалоговом окне «Добавить тип перечисления» введите DepartmentNames в качестве имени типа перечисления, измените базовый тип на Int32, а затем добавьте к типу следующие элементы: физика, химия, компьютер и экономика.
Step 17 - Щелкните ОК.
Если вы переключитесь в окно обозревателя моделей, вы увидите, что тип также был добавлен в узел Enum Types.
Давайте сгенерируем базу данных из модели, выполнив все шаги, упомянутые в главе «Первый подход к модели».
Step 1 - Щелкните правой кнопкой мыши поверхность Entity Designer и выберите «Создать базу данных из модели».
Откроется диалоговое окно «Выберите подключение к данным» мастера создания базы данных.
Step 2 - Нажмите кнопку «Новое соединение».
Step 3 - Введите имя сервера и EnumDemo для базы данных и нажмите OK.
Step 4 - Появится диалоговое окно с вопросом, хотите ли вы создать новую базу данных, нажмите Да.
Step 5- Нажмите «Далее», и мастер создания базы данных сгенерирует язык определения данных (DDL) для создания базы данных. Теперь нажмите Готово.
Step 6 - Щелкните правой кнопкой мыши редактор T-SQL и выберите «Выполнить».
Step 7 - Чтобы просмотреть сгенерированную схему, щелкните правой кнопкой мыши имя базы данных в обозревателе объектов SQL Server и выберите «Обновить».
Вы увидите таблицу Departments в базе данных.
Давайте посмотрим на следующий пример, в котором добавляются и сохраняются некоторые новые объекты отдела в контексте. А затем найдите компьютерный отдел.
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();
}
}
}
Когда приведенный выше код будет выполнен, вы получите следующий вывод -
Department ID: 2, Department Name: Computer
Мы рекомендуем вам выполнить приведенный выше пример поэтапно для лучшего понимания.