Почему Entity Framework автоматически использует ObjectContext вместо DbContext при сопоставлении таблиц базы данных с использованием ADO.NET Entity datamodel
Сначала я использую подход к базе данных; Я создал таблицы в своей базе данных SQL Server 2008, затем сопоставляю эти таблицы классам Entity Framework с использованием модели данных сущности ADO.NET. Но когда я открыл файл designer.cs, я нашел следующий код в определении класса, который был создан автоматически:
public partial class PortalEntities : ObjectContext
поэтому у меня есть следующие три вопроса, которые меня путают:
-
Почему мой класс PortalEntities
вытекает из ObjectContext
, а не DbContext
, как я ожидал?
-
Есть ли существенное различие между ObjectContext
и DbContext
, или они в основном одинаковы и предлагают те же возможности
-
Когда я пытаюсь написать что-то похожее на следующий код:
Student student = db.Students.Find(id);
Я обнаружил, что не могу использовать метод .Find()
, как я использовал, используя DbContext
, так значит ли это, что ObjectContext
и DbContext
имеют разные методы, которые я могу использовать?
BR
Ответы
Ответ 1
DbContext
представляет собой оболочку вокруг ObjectContext
, которая упрощает интерфейс для того, что мы делаем больше всего.
Если у вас есть DbContext
, вы можете получить доступ к ObjectContext
trough ((IObjectContextAdapter)dbContext).ObjectContext;
Если вы сначала используете DbContext
вместо ObjectContext
при первом использовании базы данных, вы можете переключить шаблон, используемый для генерации кода. Вы можете сделать это, щелкнув правой кнопкой мыши в своем EDMX и выбрав "Добавить элемент генерации кода". Затем вы можете выбрать шаблон DbContext.
Вот пример всего процесса.
Ответ 2
Так как VS2012 генерация кода по умолчанию изменилась с ObjectContext
на DbContext
.