Поддержка перечисления — конструктор EF

Замечание

Только начиная с EF5 — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 5. Если вы используете более раннюю версию, некоторые или все сведения не применяются.

В этом видео и пошаговом руководстве показано, как использовать типы перечислений с конструктором Entity Framework. В нем также показано, как использовать перечисления в запросе LINQ.

В этом пошаговом руководстве будет использоваться подход Model First для создания новой базы данных, но конструктор EF также можно использовать с рабочим процессом Database First для сопоставления с существующей базой данных.

Поддержка перечислений была введена в Entity Framework 5. Чтобы использовать новые возможности, такие как энумы, пространственные типы данных и табличные функции, необходимо использовать платформу .NET Framework 4.5. Visual Studio 2012 предназначен для .NET 4.5 по умолчанию.

В Entity Framework перечисление может иметь следующие базовые типы: Byte, Int16, Int32, Int64 или SByte.

Просмотр видео

В этом видео показано, как использовать типы перечислений с конструктором Entity Framework. В нем также показано, как использовать перечисления в запросе LINQ.

Представлено: Джулия Корнич

Видео: WMVMP4 | WMV | (ZIP)

Необходимые условия

Для выполнения этого пошагового руководства вам потребуется установить Visual Studio 2012, Ultimate, Premium, Professional или Web Express.

Настройка проекта

  1. Откройте Visual Studio 2012
  2. В меню "Файл" наведите указатель мыши на "Создать", а затем щелкните "Проект"
  3. В левой области щелкните Visual C#, а затем выберите шаблон консоли
  4. Введите EnumEFDesigner в качестве имени проекта и нажмите кнопку ОК

Создание новой модели с помощью конструктора EF

  1. Щелкните правой кнопкой мыши имя проекта в обозревателе решений, выберите пункт "Добавить" и выберите пункт "Создать элемент"
  2. Выберите данные из меню слева и выберите ADO.NET модель данных сущности в области "Шаблоны"
  3. Введите EnumTestModel.edmx для имени файла и нажмите кнопку "Добавить".
  4. На странице мастера модели данных сущности выберите пустую модель в диалоговом окне "Выбор содержимого модели"
  5. Нажмите кнопку Готово.

Отображается конструктор сущностей, предоставляющий графический интерфейс для редактирования модели.

Мастер выполняет следующие действия:

  • Создает файл EnumTestModel.edmx, определяющий концептуальную модель, модель хранения и сопоставление между ними. Задает свойство обработки метаданных edmx-файла для внедрения в выходную сборку, чтобы созданные файлы метаданных были внедрены в сборку.
  • Добавляет ссылку на следующие сборки: EntityFramework, System.ComponentModel.DataAnnotations и System.Data.Entity.
  • Создает файлы EnumTestModel.tt и EnumTestModel.Context.tt и добавляет их в edmx-файл. Эти файлы шаблонов T4 создают код, определяющий производный тип DbContext и типы POCO, которые сопоставляются с сущностями в модели edmx.

Добавление нового типа сущности

  1. Щелкните правой кнопкой мыши пустую область области конструктора, выберите "Добавить сущность>", откроется диалоговое окно "Создать сущность"
  2. Укажите Department для имени типа и DepartmentID для имени свойства ключа, оставьте тип как Int32
  3. Нажмите кнопку ОК.
  4. Щелкните правой кнопкой мыши сущность и выберите "Добавить новое "> Скалярное свойство"
  5. Переименование нового свойства в Name
  6. Измените тип нового свойства на Int32 (по умолчанию новое свойство имеет тип String) Чтобы изменить тип, откройте окно "Свойства" и измените свойство Type на Int32
  7. Добавьте другое скалярное свойство и переименуйте его в "Бюджет", измените тип на "Десятичный"

Добавление типа перечисления

  1. В конструкторе Entity Framework щелкните правой кнопкой мыши по свойству Name и выберите Преобразовать в перечисление.

    Преобразовать в перечисление

  2. В диалоговом окне "Добавление перечисления" введите DepartmentNames для имени типа перечисления, измените базовый тип на Int32 и добавьте следующие элементы в тип: English, Math и Economics.

    Добавление типа перечисления

  3. Нажмите кнопку ОК

  4. Сохранение модели и сборка проекта

    Замечание

    При сборке в списке ошибок могут появиться предупреждения о несопоставленных сущностях и связях. Эти предупреждения можно игнорировать, так как после того, как мы решили создать базу данных из модели, ошибки будут удалены.

При просмотре окна свойств вы заметите, что тип свойства Name был изменен на DepartmentNames, а вновь добавленный перечисляемый тип был включен в список типов.

При переключении в окно браузера модели вы увидите, что тип также добавлен в узел "Типы перечисления".

Браузер моделей

Замечание

Вы также можете добавить новые типы перечислений из этого окна, нажав правую кнопку мыши и нажав кнопку "Добавить тип перечисления". После создания типа он появится в списке типов, и вы сможете связать его со свойством.

Создание базы данных из модели

Теперь мы можем создать базу данных, основанную на модели.

  1. Щелкните правой кнопкой мыши пустое пространство в области конструктора сущностей и выберите "Создать базу данных из модели"
  2. В диалоговом окне "Выбор подключения к данным" мастера создания базы данных отображается. Нажмите кнопку новое подключение, укажите (localdb)\mssqllocaldb в качестве имени сервера и EnumTest для базы данных, затем нажмите ОК.
  3. Откроется диалоговое окно с запросом на создание новой базы данных, нажмите кнопку "Да".
  4. Нажмите "Далее", и мастер создания базы данных генерирует язык определения данных (DDL) для создания базы данных. Сгенерированный DDL отображается в диалоговом окне "Сводка и параметры". Обратите внимание, что DDL не содержит определения таблицы, сопоставленной с перечислимым типом.
  5. Щелкните "Готово". Нажатие кнопки "Готово" не выполняет скрипт DDL.
  6. Мастер создания базы данных выполняет следующие действия. Открывает EnumTest.edmx.sql в редакторе T-SQL создает разделы схемы хранилища и сопоставления файла EDMX. Добавляет сведения о строке подключения в файл App.config
  7. Нажмите правую кнопку мыши в редакторе T-SQL и откроется диалоговое окно "Выполнить подключение к серверу", введите сведения о подключении на шаге 2 и нажмите кнопку "Подключиться".
  8. Чтобы просмотреть созданную схему, щелкните правой кнопкой мыши имя базы данных в обозревателе объектов SQL Server и выберите "Обновить"

Сохранение и извлечение данных

Откройте файл Program.cs, в котором определен метод Main. Добавьте следующий код в функцию Main. Код добавляет новый объект Department в контекст. Затем он сохраняет данные. Код также выполняет запрос LINQ, возвращающий департамент, в котором имя — DepartmentNames.English.

using (var context = new EnumTestModelContainer())
{
    context.Departments.Add(new Department{ Name = DepartmentNames.English });

    context.SaveChanges();

    var department = (from d in context.Departments
                        where d.Name == DepartmentNames.English
                        select d).FirstOrDefault();

    Console.WriteLine(
        "DepartmentID: {0} and Name: {1}",
        department.DepartmentID,  
        department.Name);
}

Скомпилируйте и запустите приложение. Программа выдает следующие результаты.

DepartmentID: 1 Name: English

Чтобы просмотреть данные в базе данных, щелкните правой кнопкой мыши имя базы данных в обозревателе объектов SQL Server и выберите "Обновить". Затем нажмите правую кнопку мыши в таблице и выберите "Просмотреть данные".

Сводка

В этом пошаговом руководстве мы рассмотрели, как сопоставить типы перечислений с помощью конструктора Entity Framework и как использовать перечисления в коде.