13

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

public partial class PortalEntities : ObjectContext 

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

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

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

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

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

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

BR

ответ

24

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

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

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

Here is an example всего процесса.

+0

спасибо за ваш ответ; но я выиграю от использования DbContext вместо ObjectContext в моей первой оценке базы данных. –

+4

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

+0

Очистить пояснения! Спасибо – GibboK

0

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