Учебники

Entity Framework — DbContext

Entity Framework позволяет запрашивать, вставлять, обновлять и удалять данные, используя объекты Common Language Runtime (CLR), которые называются сущностями. Entity Framework отображает сущности и отношения, которые определены в вашей модели, в базу данных. Он также предоставляет возможности для —

  • Материализация данных, возвращаемых из базы данных как объектов сущностей
  • Отслеживать изменения, которые были внесены в объекты
  • Обрабатывать параллелизм
  • Распространение изменений объекта обратно в базу данных
  • Привязать объекты к элементам управления

Основной класс, который отвечает за взаимодействие с данными как объектами, — System.Data.Entity.DbContext. API-интерфейс DbContext не выпускается как часть .NET Framework. Чтобы быть более гибкими и частыми с выпуском новых функций для Code First и DbContext API, команда Entity Framework распространяет EntityFramework.dll через функцию Microsoft NuGet.

  • NuGet позволяет добавлять ссылки на ваши проекты .NET, вытягивая соответствующие библиотеки DLL прямо в ваш проект из Интернета.

  • Расширение Visual Studio, которое называется Диспетчер пакетов библиотеки, предоставляет простой способ извлечения соответствующей сборки из Интернета в ваши проекты.

NuGet позволяет добавлять ссылки на ваши проекты .NET, вытягивая соответствующие библиотеки DLL прямо в ваш проект из Интернета.

Расширение Visual Studio, которое называется Диспетчер пакетов библиотеки, предоставляет простой способ извлечения соответствующей сборки из Интернета в ваши проекты.

DbContext

  • DbContext API в основном предназначен для упрощения вашего взаимодействия с Entity Framework.

  • Это также уменьшает количество методов и свойств, необходимых для доступа к часто используемым задачам.

  • В предыдущих версиях Entity Framework эти задачи часто было сложно обнаружить и кодировать.

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

DbContext API в основном предназначен для упрощения вашего взаимодействия с Entity Framework.

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

В предыдущих версиях Entity Framework эти задачи часто было сложно обнаружить и кодировать.

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

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

Рекомендуемый способ работы с контекстом — определить класс, производный от DbContext и предоставляющий свойства DbSet, которые представляют коллекции указанных объектов в контексте. Если вы работаете с EF Designer, контекст будет создан для вас. Если вы работаете с Code First, вы обычно пишете контекст самостоятельно.

Следующий код является простым примером, который показывает, что UniContext является производным от DbContext.

  • Вы можете использовать автоматические свойства с DbSet, такие как getter и setter.

  • Он также делает код намного чище, но вы не обязаны использовать его для создания DbSet, когда у вас нет другой логики для применения.

Вы можете использовать автоматические свойства с DbSet, такие как getter и setter.

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

public class UniContext : DbContext {
   public UniContext() : base("UniContext") { }
   public DbSet<Student> Students { get; set; }
   public DbSet<Enrollment> Enrollments { get; set; }
   public DbSet<Course> Courses { get; set; }
}
  • Ранее EDM использовался для генерации классов контекста, которые были получены из класса ObjectContext.

  • Работа с ObjectContext была немного сложной.

  • DbContext — это оболочка для ObjectContext, которая на самом деле похожа на ObjectContext и полезна и проста во всех моделях разработки, таких как Code First, Model First и Database First.

Ранее EDM использовался для генерации классов контекста, которые были получены из класса ObjectContext.

Работа с ObjectContext была немного сложной.

DbContext — это оболочка для ObjectContext, которая на самом деле похожа на ObjectContext и полезна и проста во всех моделях разработки, таких как Code First, Model First и Database First.

Запросы

Есть три типа запросов, которые вы можете использовать, такие как —

  • Добавление нового объекта.
  • Изменение или обновление значений свойств существующего объекта.
  • Удаление существующего объекта.

Добавление новых сущностей

Добавить новый объект с Entity Framework так же просто, как создать новый экземпляр вашего объекта и зарегистрировать его с помощью метода Add в DbSet. Следующий код предназначен для того, когда вы хотите добавить нового студента в базу данных.

private static void AddStudent() {

   using (var context = new UniContext()) {

      var student = new Student {
         LastName = "Khan", 
         FirstMidName = "Ali", 
         EnrollmentDate = DateTime.Parse("2005-09-01") 
      };

      context.Students.Add(student); 
      context.SaveChanges();

   }
}

Изменение существующих объектов

Изменить существующие объекты так же просто, как обновить значение, присвоенное свойству (ам), которое вы хотите изменить, и вызвать SaveChanges. В следующем коде фамилия Али была изменена с Хана на Аслам.

private static void AddStudent() {

   private static void ChangeStudent() {

      using (var context = new UniContext()) {

         var student = (from d in context.Students
            where d.FirstMidName == "Ali" select d).Single();
         student.LastName = "Aslam";
         context.SaveChanges();

      }
   }
}

Удаление существующих объектов

Чтобы удалить объект, используя Entity Framework, вы используете метод Remove в DbSet. Удалить работы как для существующих, так и для вновь добавленных объектов. Вызов Remove для объекта, который был добавлен, но еще не сохранен в базе данных, отменяет добавление объекта. Сущность удаляется из трекера изменений и больше не отслеживается DbContext. Вызов Remove для существующей сущности, которая отслеживается изменениями, зарегистрирует сущность для удаления при следующем вызове SaveChanges. В следующем примере показан случай, когда студент удаляется из базы данных, имя которой — Али.