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 через функцию распространения NuGet от Microsoft.
NuGet позволяет добавлять ссылки на проекты .NET, перетаскивая соответствующие библиотеки DLL непосредственно в проект из Интернета.
Расширение Visual Studio, называемое диспетчером пакетов библиотек, обеспечивает простой способ переноса соответствующей сборки из Интернета в ваши проекты.
API DbContext в основном нацелен на упрощение вашего взаимодействия с Entity Framework.
Это также уменьшает количество методов и свойств, необходимых для доступа к часто используемым задачам.
В предыдущих версиях Entity Framework эти задачи часто было сложно обнаружить и кодировать.
Класс контекста управляет объектами сущности во время выполнения, что включает заполнение объектов данными из базы данных, отслеживание изменений и сохранение данных в базе данных.
Определение производного класса DbContext
Рекомендуемый способ работы с контекстом - определить класс, производный от DbContext и предоставляющий свойства DbSet, представляющие коллекции указанных сущностей в контексте. Если вы работаете с EF Designer, контекст будет создан для вас. Если вы работаете с Code First, вы обычно сами пишете контекст.
Следующий код представляет собой простой пример, показывающий, что UniContext является производным от DbContext.
Вы можете использовать автоматические свойства с DbSet, такие как геттер и сеттер.
Он также делает код намного более чистым, но вам не нужно использовать его для создания 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.
Запросы
Вы можете использовать три типа запросов, например:
- Добавление новой сущности.
- Изменение или обновление значений свойств существующей сущности.
- Удаление существующей сущности.
Добавление новых объектов
Добавить новый объект с помощью 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. В следующем примере показан случай, когда из базы данных удален ученик, имя которого Али.
private static void DeleteStudent() {
using (var context = new UniContext()) {
var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
context.Students.Remove(bay);
context.SaveChanges();
}
}