В чем разница между "Моделью" и "Контекстом" в jargon Framework Entity Framework?

В чем разница между "моделью" и "контекстом" в жаргоне Entity Framework?

Я использую первый подход базы данных Entity Framework в приложении. Эти термины возникали много раз, так как я читал разные форумы и статьи о стратегиях внедрения EF. Я не могу понять, как эти два являются разными (даже с просто структурой сущностей, но с разработкой программного обеспечения в целом). Люди используют слова так, как будто они разные, но некоторые люди, похоже, используют слова взаимозаменяемо.

Ответ 1

Контекст

Это легко. Контекстом является либо класс DbContext, либо более старый ObjectContext, который является ядром уровня доступа к данным инфраструктуры. Он обеспечивает прозрачный доступ к базе данных с помощью строго типизированных наборов объектов, отслеживает и сохраняет изменения, управляет транзакциями и подключениями к базе данных и содержит ряд методов утилиты для облегчения всех видов задач доступа к данным (например, DbContext).

Model

Это могут быть две (или три) вещи.

  • Модель данных или модель хранилища. Какова реляционная модель базы данных, лежащая в основе уровня доступа к данным EF.
  • Концептуальная модель или модель класса. Какая модель класса .Net представляет базу данных. Эта модель может быть сгенерирована EF (сначала для базы данных) или может быть существующей моделью класса (сначала код). Концептуальная модель и модель хранилища связаны посредством сопоставления, поэтому EF знает, как заполнять классы .Net из записей базы данных и, наоборот, сохранять классы .Net в базе данных.
  • Некоторые люди относятся к классам в концептуальной модели как "модели". Это не так, но я предпочитаю использовать имя объектов для этого.

Таким образом, контекст и модель - это две совершенно разные вещи. Вы можете сказать, что контекст является посредником между двумя разными типами моделей.

Ответ 2

В некотором смысле контекст относится к соединению или сеансу базы данных, где модель представляет собой сопоставление между таблицами, представлениями и т.д. для классов объектов доступа к данным (т.е. объектов, которые будут содержать данные).

Ответ 3

Модель - это класс, который обычно представляет таблицу или структуру базы данных для отображения таблицы базы данных. Например, если бы у меня была база данных для автомобилей, то модель для автомобиля могла бы быть

public class Car
{
 [Key]
 public int CarId { get; set; }
 public string Make { get; set; }
 public string Model { get; set; }
 public int Year { get; set; } 
}

Эта модель используется инфраструктурой entity и поставщиком sql (обычно для mysql или mssql) для составления запроса к базе данных. Запрос требует, чтобы это отображалось, и это задание контекста. Контекст обычно расширяет DbContext и является тем, что используется для доступа к таблице базы данных в качестве объекта памяти.

public class CarContext : DbContext
{
 DbSet<Car> Cars { get; set; }
}