Почему Entity Framework автоматически использует ObjectContext вместо DbContext при сопоставлении таблиц базы данных с использованием модели данных ADO.NET Entity

Сначала я следую подходу к базе данных; Я создал таблицы в своей базе данных SQL Server 2008, а затем сопоставил эти таблицы с классами Entity Framework, используя модель данных сущности ADO.NET. Но когда я открыл файл Designer.cs, я обнаружил следующий код в определении класса, который был создан автоматически:

public partial class PortalEntities : ObjectContext

поэтому у меня есть следующие три вопроса, которые меня смущают:

  1. Почему мой класс PortalEntities происходит от ObjectContext, а не от DbContext, как я ожидал?

  2. Есть ли большая разница между ObjectContext и DbContext, или они в основном одинаковы и предлагают одинаковые возможности?

  3. Когда я пытаюсь написать что-то похожее на следующий код:

    Student student = db.Students.Find(id);
    

Я обнаружил, что не могу использовать метод .Find(), как раньше, используя DbContext, значит ли это, что у ObjectContext и DbContext есть разные методы, которые я могу использовать?

BR


person john Gu    schedule 26.01.2012    source источник


Ответы (2)


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

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

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

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

person Wouter de Kort♦    schedule 26.01.2012
comment
Спасибо за ответ; но выиграю ли я от использования DbContext вместо ObjectContext в моем подходе к базе данных? - person john Gu; 26.01.2012
comment
DbContext имеет упрощенный интерфейс. Его будет проще использовать, и при необходимости вы всегда можете привести его к ObjectContext. Кроме того, DbContext легче имитировать для целей модульного тестирования. - person Wouter de Kort♦; 26.01.2012

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

person Timeless    schedule 21.04.2015