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

Мы рекомендуем вам выполнить приведенный выше пример поэтапно для лучшего понимания.