Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Только начиная с EF5 — функции, 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 для обновления схемы базы данных. Пример использования миграций см. в разделе Code First в новой базе данных.
Чтобы просмотреть базу данных и данные, сделайте следующее:
- В главном меню Visual Studio 2012 выберите View ->SQL Server Object Explorer.
- Если LocalDB не находится в списке серверов, нажмите правую кнопку мыши на SQL Server и выберите "Добавить SQL Server " Использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB.
- Разверните узел LocalDB
- Разверните папку "Базы данных ", чтобы увидеть новую базу данных и перейти к таблице Отдел , обратите внимание, что Code First не создает таблицу, которая сопоставляется с типом перечисления.
- Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите "Просмотреть данные"
Сводка
В этом пошаговом руководстве мы рассмотрели, как использовать типы перечислений с Entity Framework Code First.