Поддержка перечисления — код в первую очередь

Примечание.

Ef5 Onwards Only — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 5. При использовании более ранней версии могут быть неприменимы некоторые или все сведения.

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

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

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

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

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

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

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

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

Предварительные требования

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

 

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

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

Определение новой модели с помощью кода в первую очередь

При использовании разработки Code First вы обычно начинаете с написания платформа .NET Framework классов, определяющих концептуальную модель (домен). Приведенный ниже код определяет класс Department.

Код также определяет перечисление DepartmentNames. По умолчанию перечисление имеет тип int . Свойство Name класса Department имеет тип DepartmentNames.

Откройте файл Program.cs и вставьте следующие определения классов.

public enum DepartmentNames
{
    English,
    Math,
    Economics
}     

public partial class Department
{
    public int DepartmentID { get; set; }
    public DepartmentNames Name { get; set; }
    public decimal Budget { get; set; }
}

 

Определение производного типа DbContext

В дополнение к определению сущностей необходимо определить класс, производный от DbContext и предоставляющий свойства DbSet<TEntity>. Свойства DbSet<TEntity> позволяют контексту определить, какие типы необходимо включить в модель.

Экземпляр производного типа DbContext управляет объектами сущностей во время выполнения, в частности заполняет объекты данными из базы данных, отслеживает изменения и сохраняет данные в базе данных.

Типы DbContext и DbSet определяются в сборке EntityFramework. Мы добавим ссылку на эту библиотеку DLL с помощью пакета NuGet EntityFramework.

  1. В Обозреватель решений щелкните правой кнопкой мыши имя проекта.
  2. Выберите " Управление пакетами NuGet...
  3. В диалоговом окне "Управление пакетами NuGet" выберите вкладку "Интернет " и выберите пакет EntityFramework .
  4. Щелкните Установить.

Обратите внимание, что в дополнение к сборке EntityFramework также добавляются ссылки на сборки System.ComponentModel.DataAnnotations и System.Data.Entity.

В верхней части файла Program.cs добавьте следующую инструкцию using:

using System.Data.Entity;

В файле Program.cs добавьте определение контекста. 

public partial class EnumTestContext : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

 

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

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

using (var context = new EnumTestContext())
{
    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} Name: {1}",
        department.DepartmentID,  
        department.Name);
}

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

DepartmentID: 1 Name: English

 

Просмотр созданной базы данных

При первом запуске приложения Entity Framework создает базу данных для вас. Так как у нас установлена Visual Studio 2012, база данных будет создана в экземпляре LocalDB. По умолчанию Entity Framework присваивает базе данных полное имя производного контекста (например, EnumCodeFirst.EnumTestContext). В последующий раз будет использоваться существующая база данных.  

Обратите внимание, что при внесении изменений в модель после создания базы данных следует использовать code First Migrations для обновления схемы базы данных. Пример использования миграций см . в разделе "Код сначала в новую базу данных ".

Чтобы просмотреть базу данных и данные, сделайте следующее:

  1. В главном меню Visual Studio 2012 выберите View ->SQL Server обозреватель объектов.
  2. Если LocalDB не находится в списке серверов, нажмите правую кнопку мыши на SQL Server и выберите "Добавить SQL Server" Использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB.
  3. Разверните узел LocalDB
  4. Разверните папку "Базы данных", чтобы увидеть новую базу данных и перейти к таблице Отдел, обратите внимание, что Code First не создает таблицу, которая сопоставляется с типом перечисления.
  5. Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите "Просмотреть данные"

Итоги

В этом пошаговом руководстве мы рассмотрели, как использовать типы перечислений с entity Framework Code First.