Подтвердить что ты не робот

Почему 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

4b9b3361

Ответ 1

DbContext представляет собой оболочку вокруг ObjectContext, которая упрощает интерфейс для того, что мы делаем больше всего.

Если у вас есть DbContext, вы можете получить доступ к ObjectContext trough ((IObjectContextAdapter)dbContext).ObjectContext;

Если вы сначала используете DbContext вместо ObjectContext при первом использовании базы данных, вы можете переключить шаблон, используемый для генерации кода. Вы можете сделать это, щелкнув правой кнопкой мыши в своем EDMX и выбрав "Добавить элемент генерации кода". Затем вы можете выбрать шаблон DbContext.

Вот пример всего процесса.

Ответ 2

Так как VS2012 генерация кода по умолчанию изменилась с ObjectContext на DbContext.