Поддержка перечисления — код в первую очередь
Примечание.
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.
Представлено: Джулия Корнич
Предварительные требования
Для выполнения этого пошагового руководства вам потребуется установить Visual Studio 2012, Ultimate, Premium, Professional или Web Express.
Настройка проекта
- Открытие Visual Studio 2012
- В меню "Файл" наведите указатель мыши на "Создать", а затем щелкните "Проект"
- В левой области щелкните Visual C#, а затем выберите шаблон консоли
- Введите 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.
- В Обозреватель решений щелкните правой кнопкой мыши имя проекта.
- Выберите " Управление пакетами NuGet...
- В диалоговом окне "Управление пакетами NuGet" выберите вкладку "Интернет " и выберите пакет EntityFramework .
- Щелкните Установить.
Обратите внимание, что в дополнение к сборке 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 для обновления схемы базы данных. Пример использования миграций см . в разделе "Код сначала в новую базу данных ".
Чтобы просмотреть базу данных и данные, сделайте следующее:
- В главном меню Visual Studio 2012 выберите View ->SQL Server обозреватель объектов.
- Если LocalDB не находится в списке серверов, нажмите правую кнопку мыши на SQL Server и выберите "Добавить SQL Server" Использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB.
- Разверните узел LocalDB
- Разверните папку "Базы данных", чтобы увидеть новую базу данных и перейти к таблице Отдел, обратите внимание, что Code First не создает таблицу, которая сопоставляется с типом перечисления.
- Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите "Просмотреть данные"
Итоги
В этом пошаговом руководстве мы рассмотрели, как использовать типы перечислений с entity Framework Code First.